¿En qué se diferencia una subrutina de una función?
Una subrutina o una función son una secuencia de líneas de código que contienen órdenes y que se ejecutarán siguiendo un orden secuencial.
Estas líneas de código están delimitadas por palabras claves en el lenguaje de programación.
- Para definir el inicio de estas líneas se utiliza la palabra:
- Sub para la subrutina
- Function para la función
- A continuación de esta palabra clave se escribe el nombre que va a identificar esa subrutina o función, y a continuación, se escriben un par de paréntesis.
- Para definir el final de esas líneas de órdenes se utilizan otras palabras clave:
- End Sub para la subrutina
- End Function para la función
Por tanto, la sintaxis básica de una subrutina es:
Sub NombreDeLaSubrutina() ' Líneas de código End Sub
La sintaxis básica de una función es:
Function NombreDeLaFuncion() ' Líneas de código End Function
Hasta este momento, no parecen cosas muy distintas. Pero tienen una diferencia fundamental. Ambas procesan una serie de líneas de órdenes, pero sólo la función puede devolver un valor.
Supongamos que para asegurarnos que se ha ejecutado una función, queremos que nos devuelva un valor lógico, VERDADERO.
Los valores lógicos en BASIC pueden ser dos: VERDADERO o FALSO, y se llaman por su nombre en inglés, TRUE o FALSE.
Los valores lógicos en BASIC son del tipo Boolean. BASIC dispone de tipos de valores para números, para textos, para fechas... y para valores lógicos.
Si deseamos que una función nos devuelva un valor lógico, debemos escribir su definición como ves a continuación:
Function NombreDeLaFuncion() as Boolean ' Líneas de código End Function
Bien, ya hemos declarado la función NombreDeLaFuncion como una función que nos va a devolver un valor lógico. Ahora, tan sólo nos falta decirle que nos devuelva ese valor cuando haya terminado.
Observa que también hemos añadido un juego de paréntesis al final del nombre. Aunque es opcional, lo correcto, tanto en subrutinas como en funciones, es que tras su nombre se añada siempre ese juego de paréntesis ().
Para hacerlo tan sólo tenemos que decirle a la función que tome ese valor. Y se hace de la siguiente forma:
Function NombreDeLaFuncion() as Boolean ' Líneas de código NombreDeLaFuncion = True End Function
Como ves, hemos escrito el nombre de la función, un signo de igual, y el valor que queremos que devuelva (o tome o adquiera).
También se pueden añadir un par de paréntesis tras el nombre de la función y antes del signo igual, pero esto es opcional, y pocos programadores lo hacen.
Function NombreDeLaFuncion() as Boolean ' Líneas de código NombreDeLaFuncion() = True End Function
Esto no lo puede hacer una subrutina. Sólo las funciones pueden devolver valores. Esos valores pueden ser utilizados por otras subrutinas o funciones, para, por ejemplo, conocer si se ha producido o no un determinado suceso, ya que la función devolverá false o true según la situación.
Por lo tanto, si sólo necesitamos que se ejecute un procedimiento, utilizaremos una subrutina. Si además de ejecutarse el procedimiento, necesitamos que éste nos devuelva algún valor, utilizaremos una función.
Las funciones pueden devolver valores de cualquier tipo, no sólo booleanos; pero eso lo veremos más adelante.