Procedimientos y funciones

Todas las instrucciones deben estar incluidas en un procedimiento o función, a las que llamaremos mediante su identificador. A estas funciones y procedimientos podemos pasarles parámetros.

En C# tenemos 4 tipos:

  1. Los procedimientos que ejecutan un código a petición sin devolver ningún resultado.
  2. Las funciones que ejecutan un código y devuelven el resultado al código que las llamó.
  3. Los procedimientos de propiedades que permiten manejar las propiedades de los objetos creados.
  4. Los procedimientos de operador utilizados para modificar el funcionamiento de un operador cuando se aplica a una clase o una estructura.

Procedimiento

La visibilidad de un procedimiento viene determinada por  la declaración private, public o internal. Por defecto si no se indica nada se entiende que es public.

Función

La función devuelve un resultado al código invocante. La ejecución de return provoca la salida de la función.

Procedimiento de propiedades

Estos procedimientos se llaman «encapsuladores» ya que el valor de la propiedad se encapsula. Se utilizarán cuando queramos modificar y/o recuperar un valor (Set / Get).

Si una propiedad es de sólo lectura o sólo escritura, se eliminará el bloque set y/o get correspondiente. También podemos implementar automáticamente la encapsulación cuando no haya tratamiento alguno de la siguiente manera.

Procedimiento de operador

Permite la redifinicón de un operador estándar del lenguaje para utilizarlo en tipo personalizados (clase o estructura).

Para que el código anterior funcione se podría hacer esto:

Argumentos de los procedimientos y funciones

Por valor:

En este caso PrecioBruto se está pasando por valor ya que de forma predeterminada los valores enteros, números flotantes, decimales, booleanos y estructuras definidas por el usuario se pasan por valor. Los demás tipos siempre se pasan por referencia, es decir se le pasa la dirección de memoria a la que apunta la variable de forma que el procedimiento o función pueden manipular directamente el valor de esa variable.

Por referencia:

Podemos forzar el paso por referencia de una variable que por defecto se pasa como valor. para ello utilizaremos la palabra reservada «ref» o «out«, la etiqueta «ref» se debe utilizar tanto en la lista de parámetros de la función o procedimiento, como en la propia llamada a la función o procedimiento y además debe ser inicializada, por el contrario, la etiqueta «out» funciona de igual manera pero sin la exigencia de inicializar la variable.

Ejemplo de procedimiento con número de parámetros indeterminado.

Y alguna de las llamadas a esta función «media» serían:

Parámetros opcionales
Se puede indicar que un parámetro es opcional asignándole un valor, pero con la precaución de asignar también a todos los parámetros restantes un valor ya que al declarar un parámetro como opcional, el resto de parámetros también deberían serlo.

La siguiente declaración estaría mal ya que el último parámetro no sería opcional:

Lo correcto sería

Por otro lado en la llamada a la función si se especifica un parámetro opcional, todos los anteriores también se deberían definir:

En cambio esto daría error:

Parámetros nominados:

Podemos hacer la llamada a la función sin tener en cuenta el orden siempre que nominemos los parámetros. Por ejemplo:

incluso podemos combinar los parámetros por posición y por nominación

pero hay que seguir la regla de que un parámetro nominado sólo puede ser utilizado después de los parámetros por posición, el siguiente ejemplo fallaría: