14 - Declaración de métodos con parámetros y/o retorno de datos


Cuando uno plantea una clase en lugar de especificar todo el algoritmo en un único método (lo que hicimos en los primeros pasos de este tutorial) es dividir todas las responsabilidades de las clase en un conjunto de métodos.

Un método hemos visto que tiene la siguiente sintaxis:

Public Sub [nombre del método]() 
    [algoritmo]
End Sub

Veremos que hay varios tipos de métodos:

Métodos con parámetros.

Un método puede tener parámetros:

Public Sub [nombre del método]([parámetros]) 
    [algoritmo]
End Sub

Los parámetros los podemos imaginar como variables locales al método, pero su valor se inicializa con datos que llegan cuando lo llamamos.

Problema 1:

Confeccionar una clase que permita ingresar valores enteros por teclado y nos muestre la tabla de multiplicar de dicho valor. Finalizar el programa al ingresar el -1.

Programa:

Module Module1

    Public Class TablaMultiplicar
        Public Sub CargarValor()
            Dim valor As Integer
            Do
                Console.Write("Ingrese un valor (-1 para finalizar):")
                valor = Console.ReadLine()
                If valor <> -1 Then
                    Calcular(valor)
                End If
            Loop While valor <> -1
        End Sub

        Public Sub Calcular(ByVal v As Integer)
            Dim f, tabla As Integer
            For f = 1 To 10
                tabla = f * v
                Console.Write(tabla)
                Console.Write("-")
            Next
            Console.WriteLine()
        End Sub
    End Class

    Sub Main()
        Dim tablamultiplicar As New TablaMultiplicar()
        tablamultiplicar.CargarValor()
    End Sub

End Module

En esta clase no hemos definido ningún atributo, no se requieren.

El método Calcular recibe un parámetro llamado "v" de tipo entero, luego lo utilizamos dentro del método para mostrar la tabla de multiplicar de dicho valor:

        Public Sub Calcular(ByVal v As Integer)
            Dim f, tabla As Integer
            For f = 1 To 10
                tabla = f * v
                Console.Write(tabla)
                Console.Write("-")
            Next
            Console.WriteLine()
        End Sub

Como vemos los parámetros se indican entre paréntesis luego del nombre del método. Se le antecede la palabra clave ByVal al nombre del parámetro)

Un método puede no tener parámetros como hemos visto en problemas anteriores o puede tener uno o más parámetros (en caso de tener más de un parámetro los mismos se separan por coma)

El método CargarValores no tiene parámetros y tiene por objetivo cargar un valor entero por teclado y llamar al método Calcular para que muestre la tabla de multiplicar del valor que le pasamos por teclado:

        Public Sub CargarValor()
            Dim valor As Integer
            Do
                Console.Write("Ingrese un valor (-1 para finalizar):")
                valor = Console.ReadLine()
                If valor <> -1 Then
                    Calcular(valor)
                End If
            Loop While valor <> -1
        End Sub

Como vemos al método Calcular lo llamamos por su nombre y entre paréntesis le pasamos el dato a enviar (debe ser un valor o variable entera)

En este problema en la Main solo llamamos al método CargarValor, ya que el método Calcular luego es llamado por el método CargarValor:

    Sub Main()
        Dim tablamultiplicar As New TablaMultiplicar()
        tablamultiplicar.CargarValor()
    End Sub

Métodos que retornan un dato.

Un método puede retornar un dato:

Public Function [nombre del método]([parámetros]) As [Tipo de dato] 
  [algoritmo]
  return [dato]
End Function

Cuando queremos que un método retorne un dato debemos definir una Function en lugar de un procedimiento Sub.

Cuando un método retorna un dato al final de la declaración de la función indicamos el tipo de dato que devuelve. Luego dentro del algoritmo en el momento que queremos que finalice el mismo y retorne el dato empleamos la palabra clave Return con el valor respectivo.

Problema 2:

Confeccionar una clase que permita ingresar tres valores por teclado. Luego mostrar el mayor y el menor.

Programa:

Module Module1

    Public Class MayorMenor

        Public Sub cargarValores()
            Dim valor1, valor2, valor3, mayor, menor As Integer
            Console.Write("Ingrese primer valor:")
            valor1 = Console.ReadLine()
            Console.Write("Ingrese segundo valor:")
            valor2 = Console.ReadLine()
            Console.Write("Ingrese tercer valor:")
            valor3 = Console.ReadLine()
            mayor = CalcularMayor(valor1, valor2, valor3)
            menor = CalcularMenor(valor1, valor2, valor3)
            Console.WriteLine("El valor mayor de los tres es:" & mayor)
            Console.WriteLine("El valor menor de los tres es:" & menor)
        End Sub

        Public Function CalcularMayor(ByVal v1 As Integer, ByVal v2 As Integer, ByVal v3 As Integer) As Integer
            Dim m As Integer
            If v1 > v2 And v1 > v3 Then
                m = v1
            Else
                If v2 > v3 Then
                    m = v2
                Else
                    m = v3
                End If
            End If
            Return m
        End Function

        Public Function CalcularMenor(ByVal v1 As Integer, ByVal v2 As Integer, ByVal v3 As Integer) As Integer
            Dim m As Integer
            If v1 < v2 And v1 < v3 Then
                m = v1
            Else
                If v2 < v3 Then
                    m = v2
                Else
                    m = v3
                End If
            End If
            Return m
        End Function
    End Class

    Sub Main()
            Dim mm As New MayorMenor()
            mm.cargarValores()
            Console.ReadKey()
        End Sub

End Module

Si vemos la sintaxis que calcula el mayor de tres valores enteros es similar al algoritmo visto en conceptos anteriores:

        Public Function CalcularMayor(ByVal v1 As Integer, ByVal v2 As Integer, ByVal v3 As Integer) As Integer
            Dim m As Integer
            If v1 > v2 And v1 > v3 Then
                m = v1
            Else
                If v2 > v3 Then
                    m = v2
                Else
                    m = v3
                End If
            End If
            Return m
        End Function

Lo primero que podemos observar que el método retorna un entero y recibe tres parámetros, como retorna un dato utilizamos la palabra clave Function:

        Public Function CalcularMayor(ByVal v1 As Integer, ByVal v2 As Integer, ByVal v3 As Integer) As Integer

Dentro del método verificamos cual de los tres parámetros almacena un valor mayor, a este valor lo almacenamos en una variable local llamada "m", al valor almacenado en esta variable lo retornamos al final con un Return.

La llamada al método calcularMayor lo hacemos desde dentro del método CargarCalores:

            mayor = CalcularMayor(valor1, valor2, valor3)

Debemos asignar a una variable el valor devuelto por el método CalcularMayor. Luego el contenido de la variable mayor lo mostramos:

            Console.WriteLine("El valor mayor de los tres es:" & mayor)

Para mostrar un String y un Integer en el método WriteLine podemos utilizar el operador & para concatenar los dos datos. Esta línea la veníamos escribiendo:

            Console.Write("El valor mayor de los tres es:")
            Console.WriteLine(mayor)

La lógica es similar para el cálculo del menor.

Retornar