Ejemplo de Código Ada
Abajo hay un ejemplo simple (función de Ackermann) de código fuente escrito en Ada, para mostrar sus rasgos principales.
with Ada.Command_Line; use Ada.Command_Line;
with Ada.Text_Io; use Ada.Text_Io;
procedure Ackermann is
function ack (x : integer; y: integer) return integer is
begin
if x = 0 then
return y + 1;
elsif y = 0 then
return ack(x-1,1);
else
return ack(x-1,ack(x,y-1));
end if;
end ack;
x,y,a : integer;
begin
if Argument_Count = 2 then
x := Integer'Value (Argument(1));
y := Integer'Value (Argument(2));
elsif Argument_Count = 1 then
x := 3;
y := Integer'Value (Argument(1));
else
x := 3;
y := 3;
end if;
a := ack (x,y);
Put ("Ack (" & Integer'Image (x) & ",");
Put_Line (Integer'Image (y) & ") = " & Integer'Image (a));
end Ackermann;
Podemos observar que:
- La sintaxis, inspirada en Pascal, es bastante legible incluso para personas que no conozcan el lenguaje. Es un lenguaje que no escatima en la longitud de las palabras clave, en la filosofía de que un programa se escribe una vez, se modifica decenas de veces y se lee miles de veces (legibilidad es más importante que rapidez de escritura).
- Todo es case-insensitive. Ya que todo el entorno Unix es case-sensitive, a algunos programadores de Unix no les gusta este rasgo de Ada.
- En este caso, todo el programa es un solo procedimiento, que puede contener subprogramas (procedimientos o funciones) (en este caso: la función ack).
- Cada sentencia se cierra con un end qúe_cerramos. Es un modo de evitar errores y facilitar la lectura. No es necesario hacerlo en el caso de subprogramas, aunque todos los manuales lo aconsejan y casi todos los programadores de Ada lo hacen.
- Se asigna un valor con :=, se comparan dos valores con =. A los programadores de C les puede confundir este rasgo inspirado en Pascal.
- La sintaxis de atributos es objeto'atributo (o clase'atributo) (nota: esto sólo se puede hacer con los objetos predefinidos, ya que no es el concepto de atributo típico de OOP).
- Se distingue entre "procedimientos" (subrutinas que no devuelven ningún valor pero pueden modificar sus parámetros) y "funciones" (subrutinas que devuelven un valor y no modifican los parámetros). La mayoría de lenguajes de programación no hacen esta distinción, sin embargo las funciones de Ada favorecen la seguridad al reducir los posibles efectos colaterales, pues no tienen parámetros in out.