Argument validation for class methods (2024)

Steven Lord on 11 Jul 2024 at 15:51

  • Link

    Direct link to this answer

    https://au.mathworks.com/matlabcentral/answers/2136563-argument-validation-for-class-methods#answer_1484428

  • Link

    Direct link to this answer

    https://au.mathworks.com/matlabcentral/answers/2136563-argument-validation-for-class-methods#answer_1484428

Open in MATLAB Online

The class specification of the obj argument seems superflous and should be self-evidently true.

Not necessarily. The first input argument to a class method is not always required to be an instance of that class! There are two common patterns where this may not be the case. Let's take a sym object as an example.

syms x

This command calls the plus method for the sym class, as we can tell using the which function.

This also calls the plus method for the sym class, even though 1 is not a sym. It doesn't call the plus defined for double arrays.

z = 1 + x

z=Argument validation for class methods (3)

which('plus(1, x)')

/MATLAB/toolbox/symbolic/symbolic/@sym/plus.m % sym method

which('plus(1, 2)')

built-in (/MATLAB/toolbox/matlab/ops/@double/plus) % double method

Another common pattern is when class precedence is involved. [I suppose the example above simplifies down to this as well, since as stated on that documentation page double is always inferior to classes defined using classdef, which is the case for the sym class.] The graph object in MATLAB has an overloaded plot method that can accept an axes handle as its first input.

g = graph(bucky);

ax = axes;

plot(ax, g)

Argument validation for class methods (4)

Despite the first input to plot being an axes object, MATLAB calls the graph plot method.

which('plot(ax, g)')

/MATLAB/toolbox/matlab/graphics/math/@graph/plot.m % graph method

This is because the graph class states that the axes class (technically matlab.graphics.axis.Axes) is one of its InferiorClasses (as listed in the metaclass information.) So if both a graph object and an axes object are in a method's argument list, regardless of the order in which they're listed in that argument list, we call graph's method.

q = ?graph;

{q.InferiorClasses.Name}.'

ans = 2x1 cell array

{'matlab.graphics.axis.Axes'} {'matlab.ui.control.UIAxes' }

class(ax)

ans = 'matlab.graphics.axis.Axes'

But to get back to your question about performance, measure it and find out! You'll probably want to use timeit or the Profiler as I suspect the impact with and without the validation is going to be so small tic and toc may not capture it. I strongly suspect that unless your method is very fast (returning a constant value) this probably isn't going to be your bottleneck.

3 Comments

Show 1 older commentHide 1 older comment

John on 11 Jul 2024 at 17:36

Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/2136563-argument-validation-for-class-methods#comment_3209068

  • Link

    Direct link to this comment

    https://au.mathworks.com/matlabcentral/answers/2136563-argument-validation-for-class-methods#comment_3209068

Open in MATLAB Online

Thanks for your reply and the thorough response. But to play Devil's Advocate, you've partially sidestepped the original question. All of the examples (plus, plot, etc.) do not use arguments declarations for validation. If the method in question is written to support varargin inputs, or like plus are designed with internal calls design to sort out how to manage the input arguments, you're probably not using an arguments declaration anyhow.

I'll also grant that the overhead from doing the validation will be minimal in most applications. It's probably safer to include the validation if you expect users to invoke the method with

foo = my_class;

add_to_obj(foo, 5);

That way you'll get an error thrown during validation rather than a problem further down the line.

As an aside, I really like arguments as I find it much cleaner and succinct than working with inputParser in many situations. It would be useful to have an additional builtin validator, like mustBeEmptyOrA (e.g., allows an empty default, but if it isn't empty is has to satisfy mustBeA). This comes up often enough that it creates a dependency issue when distributing code.

Steven Lord on 11 Jul 2024 at 19:21

Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/2136563-argument-validation-for-class-methods#comment_3209153

  • Link

    Direct link to this comment

    https://au.mathworks.com/matlabcentral/answers/2136563-argument-validation-for-class-methods#comment_3209153

I used the plus function / method in my example, but your add_to_obj(obj, B) method looks like it is adding together obj and B, doesn't it? So it could be called plus, couldn't it?

Please contact Technical Support directly using this link to submit an enhancement request for mustBeEmptyOrA. When you do, please describe your use case (especially how the lack of it proves to be a problem when you distribute your code.) The developers benefit greatly when designing new features if they have real-world usage stories to help them consider design trade-offs.

John on 11 Jul 2024 at 19:41

Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/2136563-argument-validation-for-class-methods#comment_3209178

  • Link

    Direct link to this comment

    https://au.mathworks.com/matlabcentral/answers/2136563-argument-validation-for-class-methods#comment_3209178

My example was really just intended as a minimal demonstration. The real applications were quite different. But thanks nontheless. I'll put in a enhancement request, as you suggest.

Sign in to comment.

Argument validation for class methods (2024)

References

Top Articles
Murphy Whitehackle Gamefowl: All You Need to Know - Sustainable Agriculture
Easy Homemade Panzerotti (Grandma’s Italian Panzerotti Recipe)
Www.paystubportal.com/7-11 Login
Victory Road Radical Red
Tesla Supercharger La Crosse Photos
Undergraduate Programs | Webster Vienna
Boggle Brain Busters Bonus Answers
Craigslist Pet Phoenix
United Dual Complete Providers
Craigslist Phoenix Cars By Owner Only
Scentsy Dashboard Log In
2013 Chevy Cruze Coolant Hose Diagram
World Cup Soccer Wiki
Www.paystubportal.com/7-11 Login
Inside California's brutal underground market for puppies: Neglected dogs, deceived owners, big profits
Purple Crip Strain Leafly
Industry Talk: Im Gespräch mit den Machern von Magicseaweed
Craiglist Galveston
Bnsf.com/Workforce Hub
Transfer and Pay with Wells Fargo Online®
Illinois VIN Check and Lookup
How Much You Should Be Tipping For Beauty Services - American Beauty Institute
Satisfactory: How to Make Efficient Factories (Tips, Tricks, & Strategies)
Curver wasmanden kopen? | Lage prijs
Understanding Genetics
north jersey garage & moving sales - craigslist
Maxpreps Field Hockey
Getmnapp
Craigslist Lake Charles
Znamy dalsze plany Magdaleny Fręch. Nie będzie nawet chwili przerwy
Dl.high Stakes Sweeps Download
Darknet Opsec Bible 2022
Helpers Needed At Once Bug Fables
Guide to Cost-Benefit Analysis of Investment Projects Economic appraisal tool for Cohesion Policy 2014-2020
Helloid Worthington Login
'Conan Exiles' 3.0 Guide: How To Unlock Spells And Sorcery
Smartfind Express Henrico
Andhra Jyothi Telugu News Paper
Philadelphia Inquirer Obituaries This Week
Nsav Investorshub
9 oplossingen voor het laptoptouchpad dat niet werkt in Windows - TWCB (NL)
Go Bananas Wareham Ma
SF bay area cars & trucks "chevrolet 50" - craigslist
Senior Houses For Sale Near Me
Senior Houses For Sale Near Me
Tacos Diego Hugoton Ks
Leland Westerlund
Theater X Orange Heights Florida
Spn 3464 Engine Throttle Actuator 1 Control Command
Erica Mena Net Worth Forbes
When Is The First Cold Front In Florida 2022
Latest Posts
Article information

Author: Aron Pacocha

Last Updated:

Views: 5921

Rating: 4.8 / 5 (68 voted)

Reviews: 91% of readers found this page helpful

Author information

Name: Aron Pacocha

Birthday: 1999-08-12

Address: 3808 Moen Corner, Gorczanyport, FL 67364-2074

Phone: +393457723392

Job: Retail Consultant

Hobby: Jewelry making, Cooking, Gaming, Reading, Juggling, Cabaret, Origami

Introduction: My name is Aron Pacocha, I am a happy, tasty, innocent, proud, talented, courageous, magnificent person who loves writing and wants to share my knowledge and understanding with you.