Está en la página 1de 4

Modern Object Pascal

introducción para
programadores
Michalis Kamburelis
Apoyar el autor en

Tabla de contenido

1. ¿Por qué?
Hay muchos libros y recursos sobre Pascal por ahí, pero también muchos de ellos
hablan del antiguo Pascal, sin clases, unidades o genéricos.

Así que escribí esta breve introducción a la que llamo Modern Object Pascal. La
mayoría de los programadores que lo usan en realidad no lo llaman "Modern Object
Pascal", lo llamamos simplemente "our Pascal". Pero cuando introduces a un lenguaje,
siento que es importante destacar que se trata de un lenguaje moderno, orientado a
objetos. Ha evolucionado enormemente desde que el antiguo (Turbo) Pascal que
muchas personas aprendieron en las escuelas hace mucho tiempo. En cuanto a
prestaciones, es bastante similar a C ++ o Java o C#.

• Tiene todas las características modernas que usted espera - clases, unidades,
interfaces, genéricos ...
• Se compila a un código rápido, nativo,
• Es de tipo de muy seguro,
• De alto nivel, pero también puede ser de bajo nivel, si lo necesita.

También tiene un excelente compilador, portátil y de código abierto llamado


el compilador Free Pascal , http://freepascal.org/ . Y un IDE de acompañamiento (editor,
depurador, una biblioteca de componentes visuales, diseñador de formularios)
llamadó Lazarus http://lazarus.freepascal.org/ . Yo mismo, soy el creador del Castle
Game Engine, https://castle-engine.sourceforge.io/, que es un motor de juego 2D y 3D
portátil y fabuloso que usa este lenguaje para crear juegos en muchas plataformas
(Windows, Linux, MacOSX , Android, iOS, plug-in web).
Esta introducción se dirige principalmente a los programadores que ya tienen
experiencia en otros lenguajes. No vamos a cubrir aquí el significado de algunos
conceptos universales, como "lo que es una clase", solo mostramos cómo hacerlo en
Pascal.

2. Fundamentos
2.1. Programa "Hola mundo"
{$mode objfpc}{$H+}{$J-} // Solo usa esta línea en todos los
códigos fuentes modernos

program MiPrograma; // Graba este archivo como miprograma.lpr


begin
Writeln(Hola mundo!');
end.

Este es un programa completo que se puede compilar y ejecutar.

• Si utiliza la línea de comandos FPC, basta con crear un nuevo


archivo miprograma.lpr y ejecutar fpc miprograma.lpr.
• Si utiliza Lazarus, cree un nuevo proyecto (menú Archivo → Nuevo
Proyecto → Programa simple). Guardarlo como miprograma y pega este código
fuente como el archivo principal. Compilar usando el elemento de menú Ejecutar →
Compilar.
• Este es un programa de línea de comandos, por lo que, en cualquier caso - basta con
ejecutar el ejecutable compilado a partir de la línea de comandos.

El resto de este artículo habla sobre el lenguaje Object Pascal, así que no esperes ver
nada más elegante que la línea de comandos. Si quieres ver algo fabuloso, solo crea un
nuevo proyecto en la interfaz gráfica de usuario Lazarus ( Archivo → Nuevo
proyecto → Aplicación ). Voila - una aplicación de interfaz gráfica de usuario de trabajo,
multiplataforma, con aspecto nativo en todas partes, utilizando una cómoda biblioteca
de componente visuales. El compilador Lazarus y Free Pascal viene con una gran
cantidad de unidades listas para la creación de redes, interfaz gráfica de usuario, base
de datos, formatos de archivo (XML, JSON, imágenes ...), hilos y todo lo que pueda
necesitar. Ya he mencionado el fabuloso Castle Game Engine antes :)

2.2. Funciones, procedimientos, tipos primitivos


{$mode objfpc}{$H+}{$J-}

program MiPrograma;
procedure MiProcedimiento(const A: Integer);
begin
Writeln('A + 10 es: ', A + 10);
end;

function MiFuncion(const S: string): string;


begin
Result := S + 'las cadenas son automáticamente
manipuladas';
end;

var
X: Single;
begin
Writeln(MiFuncion('Nota: '));
MiProcedimiento(5);

// La division usando "/" siempre regresa resultados


flotantes, usa "div" para divisiones enteras
X := 15 / 5;
Writeln('X es ahora: ', X); // notación cientifica
Writeln('X es ahora: ', X:1:2); // 2 decimales
end.

Para devolver un valor desde una función, asigna algo a la variable


mágica Result. Puede leer y cambiar la variable Result libremente al igual que una
variable local.

function MiFuncion(const S: string): string;


begin
Result := S + 'algo';
Result := Result + ' algo más!';
Result := Result + ' y más!';
end;

También puede tratar el nombre de la función (como MiFuncion en el ejemplo


anterior) como una variable, a la que puede asignarse. Pero recomiendo no hacerlo en
nuevo código, ya que parece "sospechoso" cuando se utiliza en el lado derecho de la
expresión de asignación. Sólo tiene que usar Result siempre cuando se quiere leer o
cambiar el resultado de la función.

Si desea llamar a la función misma de forma recursiva, puede hacerlo por supuesto. Si
está llamando a una función sin parámetros de forma recursiva, asegúrese de
especificar el paréntesis (a pesar de que en Pascal por lo general puede omitir los
paréntesis para usar funciones sin parámetros), esto hace una llamada recursiva a una
función sin parámetros diferente al resultado actual de esta función. Como esto:
function LeerEnterosHastaCero: string;
var
I: Integer;
begin
Readln(I);
Result := IntToStr(I);
if I <> 0 then
Result := Result + ' ' + LeerEnterosHastaCero();
end;

Puede llamar Exit para finalizar la ejecución del procedimiento o función antes de que
llegue a la final end;. Si llama Exit en una función sin parámetros, devolverá el último
valor asignado a Result. También puede utilizar el constructo Exit(X) para
establecer el resultado de la función y salir ahora - esto es como el return X en
lenguajes de programación como C.

function AgregaNombre(const NombresExistentes, NuevoNombre:


string): string;
begin
if NombresExistentes = '' then
Exit(NuevoNombre);
Result := NombresExistentes + ', ' + NuevoNombre;
end;