Függvények és eljárások
A függvények egy értéket számolnak ki, és visszaadják azt a return utasítás segítségével, ezzel szemben az eljárások egy olyan utasítássorozatot hajtanak végre, amelynek a hatásai fontosak. A függvényeinket úgy írjuk meg, hogy az általuk végrehajtott utasításoknak ne legyenek mellékhatásai a programra nézve, azaz azok ne változtassanak globális változókat, kizárólag az általuk kiszámított értéket használjuk fel.
A másik fontos különbség, az alprogramok hívási lehetőségeiben rejlik. Egy törzs utasítássorozat részében meghívhatunk eljárásokat, de függvényeket nem. Függvények kizárólag valamilyen kifejezésben fordulhatnak elő. Ennek egyszerű magyarázata az, hogy a függvényeket Adában a visszatérési értékeiken is túl lehet terhelni… Ezért csak olyan helyeken fordulhatnak elő függvény-hívások, ahol használjuk az általuk kiszámított értékeket, pl. értékadásban, elágazások kifejezéseiben. Ezeken a helyeken eljárásokat nem hívhatunk meg. Ez hasonlóan igaz a törzs deklarációs részére is, ahol szintén csak függvényhívás állhat. (Itt fontos megjegyeznünk, hogy amennyiben egy deklaráció a következőképpen néz ki: a,b:integer:=f(1); akkor az f függvény kétszer hívódik meg…)