Modifica el archivo dpr de la lección anterior con el siguiente contenido
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
program MyProgram;
procedure MyProcedure(const A: Integer);
begin
WriteLn('A + 10 is: ', A + 10);
end;
function MyFunction(const S: string): string;
begin
Result := S + 'strings are automatically managed';
end;
var
X: Single;
begin
WriteLn(MyFunction('Note: '));
MyProcedure(5);
// El operador "/" genera siempre resultado flotante, usa "div" para división entera
X := 15 / 5;
WriteLn('X is now: ', X); // notación científica
WriteLn('X is now: ', X:1:2); // 2 cifras decimales
end.Lenguaje del código: PHP (php)
D:\fpcdemo>fpc mydemo.dpr
Free Pascal Compiler version 3.2.2 [2021/05/15] for i386
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling mydemo.dpr
Linking mydemo.exe
20 líneas compiladas, 0,0 seg, 39248 bytes código, 2484 bytes datos
D:\fpcdemo>mydemo
Note: strings are automatically managed
A + 10 is: 15
X is now: 3.000000000E+00
X is now: 3.00
D:\fpcdemo>Lenguaje del código: CSS (css)

A continuación la explicación de los comentarios. Los caracteres no ingleses pueden aparecer distorsionados; configura la consola para salida en chino.
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
program MyProgram;
// Nombre personalizado del programa. Los programas consola Pascal deben empezar por program nombre; luego declarar variables, procedimientos y código principal
// Sin valor de retorno: procedure procedimiento. Los procedimientos y funciones solo se ejecutan al ser llamados
procedure MyProcedure(const A: Integer);
begin
WriteLn('A + 10 =:', A + 10);
end;
// Con valor de retorno: function función
function MyFunction(const S: string): string;
begin
Result := S + 'la memoria de las cadenas es gestionada automáticamente por el sistema';
end;
// Object Pascal no tiene función main, el bloque más externo begin...end. es el punto de entrada del programa, este es el bloque principal
var
X: Single; // Tipo primitivo de coma flotante simple
begin
// Toda la lógica a ejecutar se escribe aquí
WriteLn(MyFunction('Aviso:'));
MyProcedure(5);
// El operador "/" siempre devuelve un flotante, usa div para división entera
X := 15 / 5;
WriteLn('X is now:', X); // Muestra en notación científica automáticamente
WriteLn('X is now:', X:1:2); // Limita a dos cifras decimales
end. // end. con punto marca el final completo del programaLenguaje del código: PHP (php)
Cada función o procedimiento usa un par begin y end para delimitar su cuerpo, equivalente a las llaves { } de C, C++, Java y otros lenguajes.
WriteLn imprime contenido en consola, las comillas simples ‘ ‘ delimitan literales de cadena. WriteLn('A + 10 =:', A + 10); imprime sucesivamente la cadena A + 10 =: y el resultado del cálculo A + 10.
Un programa solo puede tener un único bloque externo begin y end. que contiene el código principal y llama a otras funciones y procedimientos.
X := 15 / 5;
WriteLn(‘X is now: ‘, X); // notación científica
WriteLn(‘X is now: ‘, X:1:2); // dos decimales
/ es división flotante, el cociente siempre es un número decimal.
Las dos primeras líneas son directivas de precompilación
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}Lenguaje del código: PHP (php)
Se trata de una directiva de compilación condicional exclusiva de FPC
{$ifdef FPC}: Ejecuta la configuración intermedia solo si el compilador es Free Pascal{$mode objfpc}: Cambia al modo sintáctico ObjFpc{$H+}: Habilita las cadenas largas (tipo string moderno con gestión automática de memoria, obligatorio){$J-}: Desactiva las constantes modificables (las constantes no se pueden cambiar en ejecución, mayor seguridad){$endif}: Fin del bloque condicional
Propósito: Activar sintaxis moderna solo al compilar con FPC; el compilador Delphi ignora todo este bloque.
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}Lenguaje del código: PHP (php)
Compilación condicional multiplataforma
MSWINDOWS: Solo surte efecto en sistema operativo Windows{$apptype CONSOLE}: Define el programa como una aplicación consola (abre una ventana de terminal negra en lugar de ventana gráfica). Esta línea se ignora al compilar en Linux/macOS.
Conceptos clave
stringtipo nativo básico; FPC/Delphi gestiona su memoria automáticamente, no requiere liberación manual- procedure procedimiento: Sin valor de retorno; function función: Con valor de retorno almacenado en la variable nativa
Result - Diferenciación de divisiones:
/división flotante;divdivisión entera truncada - Salida formateada
variable:anchoTotal:decimalespara controlar la visualización de flotantes - Las funciones recursivas sin parámetros deben llevar paréntesis vacíos
()para evitar ambigüedad sintáctica Exit(valor)permite especificar valor de retorno y salir de la función anticipadamente- Se puede invocar una función ignorando su valor de retorno, útil para lógica con efectos secundarios como modificar variables globales
Reglas de valor de retorno de funciones
- La variable especial integrada
Resultalmacena el valor devuelto por la función, se lee y escribe igual que una variable local
function MyFunction(const S: string): string;
begin
Result := S + 'One';
Result := Result + 'Two';
end;
Lenguaje del código: PHP (php)
- La sintaxis antigua permite asignar directamente al nombre de la función (
MyFunction := xxx), no recomendada por baja legibilidad; usa siempreResult.
C/C++/Java/C# usan
=para asignación y==para comparación de igualdad. Pascal funciona al revés::=para asignar variables, un solo=para comparar, igual que la notación matemática.Pascal no tiene el operador
==
Sustituye la antigua MyFunction del ejemplo por esta versión. Esta función añade primero «One» y luego «Two» al final de la cadena recibida al invocarla.
La cadena final devuelta es: cadena original + One + Two
Llamadas recursivas
Las funciones sin parámetros en llamadas recursivas deben llevar paréntesis vacíos () para diferenciar «ejecutar la función» y «leer el valor de retorno actual»:
function SumIntegersUntilZero: Integer;
var I: Integer;
begin
ReadLn(I);
Result := I;
if I <> 0 then
Result := Result + SumIntegersUntilZero(); // llamada recursiva con ()
end;
Lenguaje del código: JavaScript (javascript)
Para la función sin parámetros SumIntegersUntilZero:
SumIntegersUntilZero()→ Ejecuta la función en recursión y obtiene el valor de retornoSumIntegersUntilZero→ Accede a la variable internaResult(valor de retorno propio de la función)
Código sin paréntesis:
Result := Result + SumIntegersUntilZero;
El compilador lo interpreta como:
Result := Result + Result;
Equivale a Result := Result * 2, toda la lógica recursiva se rompe, generando bucle infinito y valores duplicados constantemente.
En este ejemplo, la función se llama a sí misma repetidamente hasta que la entrada sea 0 para salir; mientras el valor no sea cero, la recursión continúa.
Exit: Salida anticipada
- Exit sin parámetros: Sale inmediatamente de la función, devuelve el valor ya asignado a Result
Exit(valor): Especifica directamente el valor de retorno y finaliza la función, equivalente al return x de C
function AddName(const ExistingNames, NewName: string): string;
begin
if ExistingNames = '' then
Exit(NewName); // Devuelve NewName directamente y termina
Result := ExistingNames + ', ' + NewName;
end;
Lenguaje del código: PHP (php)
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
program MyProgram;
procedure MyProcedure(const A: Integer);
begin
WriteLn('A + 10 is: ', A + 10);
end;
function AddName(const ExistingNames, NewName: string): string;
begin
if ExistingNames = '' then
Exit(NewName);
Result := ExistingNames + ', ' + NewName;
end;
var
X: Single;
begin
WriteLn(AddName('Tom','Jack'));
WriteLn(AddName('Tom',''));
WriteLn(AddName('','Jack'));
end.Lenguaje del código: PHP (php)
Invocar funciones como procedimientos (ignorar valor de retorno)
Aunque una función tenga valor de retorno, se puede ejecutar solo su lógica ignorando el resultado; adecuado para lógica con efectos secundarios como modificar variables globales:
var
Count, MyCount: Integer;
function CountMe: Integer;
begin
Inc(Count); // Efecto secundario: incrementar variable global
Result := Count;
end;
begin
Count := 10;
CountMe; // Ignora retorno, solo ejecuta lógica, Count pasa a 11
MyCount := CountMe; // Almacena valor devuelto, Count pasa a 12
end.
Lenguaje del código: PHP (php)
Ejemplo completo funcional
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
program MyProgram;
var
Count, MyCount: Integer;
function CountMe: Integer;
begin
Inc(Count);
Result := Count;
end;
begin
Count := 10;
WriteLn(CountMe);
MyCount := CountMe;
WriteLn(MyCount);
end.Lenguaje del código: PHP (php)
Inc es función estándar nativa de Pascal (FPC/Delphi), incrementa una variable en 1.
var es la palabra clave de declaración de variables en Pascal, su función es definir variables.
var
Count, MyCount: Integer;Lenguaje del código: JavaScript (javascript)
var: Abre el bloque de declaración de variables
Count, MyCount: Dos nombres de variables
Integer: Tipo entero
Las variables declaradas dentro del bloque var de este ejemplo son globales, accesibles por todas las procedimientos y funciones de todo el programa.
Funciones, procedimientos y tipos primitivos básicos