Lección 15 · 15 de 20
Parámetros var y const · Pascal
Pase parámetros en Pascal por valor, por referencia con var y de solo lectura con const, y devuelva varios resultados desde un procedimiento.

Un parámetro normal se pasa por valor: el procedimiento recibe una copia. AddBonus pone bonus := 0, pero el bonus del programa principal sigue valiendo 30 después de la llamada.
Con `var` delante, el parámetro es la propia variable de quien llama (se pasa por referencia): lo que haga el procedimiento se nota fuera. Por eso score pasa de 120 a 150. A un parámetro var hay que darle una variable; AddBonus(120, 30) no compilaría.
var también sirve para devolver varios resultados: SplitTime recibe 197 segundos y rellena mins y secs a la vez, algo que una función, con un solo Result, no puede hacer directamente.
`const` marca un parámetro de solo lectura: si Show intentara cambiar player, el compilador daría un error. Con cadenas y records, además, es más eficiente, porque no se hace ninguna copia. Es buena costumbre usarlo con todo lo que no se vaya a modificar.
Código · main.pas
program main;// score is var (the caller's own variable); bonus is just a copy.procedure AddBonus(var score: Integer; bonus: Integer);begin score := score + bonus; bonus := 0;end;// var parameters let a procedure hand back several results.procedure SplitTime(total: Integer; var mins, secs: Integer);begin mins := total div 60; secs := total mod 60;end;// const: read-only, and the string is not copied.procedure Show(const player: String; score: Integer);begin WriteLn(player, ': ', score, ' points');end;var score, bonus, mins, secs: Integer;begin score := 120; bonus := 30; AddBonus(score, bonus); Show('Ana', score); WriteLn('Bonus after the call: ', bonus); SplitTime(197, mins, secs); WriteLn('Lap time: ', mins, ' min ', secs, ' s');end.Salida · fpc main.pas && ./main
Ana: 150 points Bonus after the call: 30 Lap time: 3 min 17 s
Para recordar
- Sin nada delante, el parámetro es una copia.
vartrabaja sobre la variable de quien llama.- Con
varun procedimiento puede devolver varios valores. constimpide cambiar el parámetro y evita copias.
Ejercicio
Escriba un procedimiento Swap(var a, b: Integer) que intercambie dos variables y úselo para ordenar de menor a mayor dos puntuaciones, ana y leo.