## 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?

## Top comments (0)