DMarlon Studio

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.

Pascal · Parámetros var y const en DMarlon Studio: el código del ejemplo y su salida en la terminal

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.
  • var trabaja sobre la variable de quien llama.
  • Con var un procedimiento puede devolver varios valores.
  • const impide 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.