Firma de función en Perl

Una función o subrutina de Perl es un grupo de sentencias que juntas realizan una tarea específica. En cada lenguaje de programación, el usuario quiere reutilizar el código. Entonces, el usuario pone la sección de código en función o subrutina para que no haya necesidad de escribir código una y otra vez. En Perl, los términos función, subrutina y método son los mismos, pero en algunos lenguajes de programación se consideran diferentes. La palabra subrutinas se usa más en la programación de Perl porque se crea usando la palabra clave sub. Cada vez que hay una llamada a la función, Perl deja de ejecutar todo su programa y salta a la función para ejecutarla y luego regresa a la sección de código que estaba ejecutando anteriormente. Uno puede evitar el uso de la declaración de devolución.

Definición de subrutinas: la forma general de definir la subrutina en Perl es la siguiente:

sub subroutine_name
{
    # body of method or subroutine
}

Firma de función: cuando se define una función, también se define un conjunto de parámetros entre paréntesis para definir el tipo de argumentos que recibirá en la llamada de función. Esta firma de función puede contener un parámetro o una lista de parámetros. Una subrutina o función cuya firma está definida puede recibir argumentos solo del tipo definido en la subrutina. Generará un error si los argumentos pasados ​​a la subrutina difieren de su firma.
La firma de una función dice mucho sobre el tipo de subrutina. Permite al usuario hacer diferentes subrutinas del mismo nombre pero con diferente firma, es decir, con diferentes parámetros. En Perl, el nombre de la subrutina puede ser el mismo para diferentes subrutinas pero sus parámetros deben ser diferentes.
Ejemplo:

sub example_func($variable)
{
    statement;
}

sub example_func($variable1, $variable2)
{
    statement;
}

En el ejemplo anterior, el nombre de las subrutinas es el mismo pero su número de argumentos es diferente y, por lo tanto, no se considerarán como subrutinas diferentes y su código Perl no generará ningún error.

Pasar argumentos de un tipo diferente al de la firma: cuando una función se define con una firma, esa subrutina está obligada a aceptar los argumentos del mismo tipo que su firma. Si se pasa un argumento que no sea la firma de la función, generará un error, lo que resultará en la falla de compilación del código.
Ejemplo:

#!/usr/bin/perl
  
# Defining Function Signature
sub example(Int $variable)
{
    return $variable / 2;
}
  
# Function Call
print example(44);

Producción:

22

Si pasamos un argumento del tipo que no sea la firma de la función, generará un error como se muestra a continuación:

#!/usr/bin/perl
  
# Defining Function Signature
sub example(Int $variable)
{
    return $variable / 2;
}
  
# Function Call with 
# string type parameter
print example("44");

Error al compilar prog.pl
El ejemplo de llamada (Str) nunca funcionará con la firma declarada (Int $variable)
en prog.pl:7

Diferencia en el número de argumentos:
cuando se define una firma de función, también contiene el número de argumentos que se le pueden pasar, junto con el tipo de argumentos. Si llamamos a la función con un número diferente de argumentos, resultará en un error ya que Perl tiene un significado diferente para funciones con firmas diferentes.
Ejemplo:

#!/usr/bin/perl
  
# Defining Function Signature
sub example(Int $variable)
{
    return $variable / 2;
}
  
# Function Call with 
# two arguments
print example(44, 29);

Producción:

Error al compilar prog.pl
El ejemplo de llamada (Int, Int) nunca funcionará con la firma declarada (Int $variable)
en prog.pl:10

La firma de función es un aspecto útil, pero a veces se vuelve muy molesto para algunos programadores porque definir una firma de función restringe el uso de la función a un tipo específico de parámetros. Si la función se define sin una firma, no hay restricción sobre el tipo de parámetros que se le pueden pasar.
Ejemplo:

#!/usr/bin/perl
  
# Defining Function Signature
sub example($variable)
{
    return $variable / 2;
}
  
# Function Call with Integer argument
# written as a string type
print example("44");

Producción:

22

En el código anterior, una función se declara sin un tipo de argumento específico y, por lo tanto, cuando se le pasa un valor entero como una string, convierte automáticamente el argumento en la forma de número entero y da el resultado. Pero, si llamamos a la función con un argumento de string y la operación que se realizará en ella requiere un valor entero, dará como resultado un error como se muestra a continuación:

#!/usr/bin/perl
  
# Defining Function Signature
sub example($variable)
{
    return $variable / 2;
}
  
# Function Call with 
# string type argument
print example("Geeks");

Producción:

No se puede convertir string a número: el número de base 10 debe comenzar con dígitos válidos o ‘.’
en sub ejemplo en prog.pl línea 4
en bloqueen prog.pl línea 11

En realidad arrojado a:
en el subejemplo en prog.pl línea 4
en bloqueen prog.pl línea 11

Publicación traducida automáticamente

Artículo escrito por Abhinav96 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *