Assume you have a function designed to take 3 arguments. A
person, a
place, and a
thing. In that order.
Now, this function might have the person doing something in the place with the thing. Which might be called like this.
act_with (person, place, thing);
It might also have the person doing something in a place, but there's no thing involved. Which might be called like this.
act_with (person, place, null);
Lastly, it might have the person doing something with a thing, but not have any information about a place. Which might be called like the following.
act_with (person, null, thing);
The function declaration in these situations would likely require a person to be passed as the first argument, and if the second or third arguments are not null do something with them too.
Let's assume the person, place, and thing function is an attack function for a game. The function would obviously require a person to carry out the attack, and a place for the attack to happen, but the person might not have a thing to attack with.
In that situation, the attack function might set the attacker to
person, and modify persons strength attributes depending on place, and if there's a thing passed instead of null for the third argument it may modify the attackers power according to the attributes of thing. However if
thing is null, it would just use the a default such as bare hands.
Strong with this one, the sudo is.