dinhanhx

Posted on

# How stupid is Matlab function?

## Function definition in a script

### Python

Filename: `the_amazing_file.py`

``````def returnTrue():
return True

print(returnTrue())
``````

Here you define the function first, then call it. It's like how you do math with paper. You write down the formula, then you apply it.

### Matlab

So the language for math, the function should be defined first right?

Yeah no.

Filename: `the_amazing_file.m`

``````disp(returnTrue());

function y = returnTrue()
y = true;
end
``````

Seriously matlab, are you for math?

## Calling non-parameter function

Let say you have a function `foo()` which doesn't have parameters

``````bar = foo()
bar = foo
% Both are equivalent.
``````

But `foo()` and `foo` mean two different things. `foo()` means calling a function. `foo` means "I'm a variable". If you use Python, it's passing functions as an argument. If you use C, it's function pointer.

## Passing functions as argument vs Defining anonymous functions

Alright how to pass function as an argument in matlab? You use `@` I copied this example from matlab function doc

``````% Compute the value of the integrand at 2*pi/3.
x = 2*pi/3;
y = myIntegrand(x)

% Compute the area under the curve from 0 to pi.
xmin = 0;
xmax = pi;
f = @myIntegrand;
a = integral(f,xmin,xmax)

function y = myIntegrand(x)
y = sin(x).^3;
end
``````

Guess what else use `@`? Anonymous functions

``````sqr = @(x) x.^2;
``````

If you look at the way anonymous function is defined and look at how non-parameter function (previous section), you may ask the following line

``````bar = foo;
``````

could mean anything right? Yeah it could mean:

• calling a function without parameters
• assigning anonymous function to different variable.

The more confusing, the more we analyse.

Now you may argue, "I know my functions". Yeah but can you remember other people functions when reading a long file while trying to understand what it does? Can you?