Ruby | Alteración del flujo de control

Requisito previo: toma de decisiones , bucles

El lenguaje de programación Ruby proporciona algunas declaraciones además de bucles, condicionales e iteradores, que se utilizan para cambiar el flujo de control en un programa.
En otras palabras, estas declaraciones son una pieza de código que se ejecuta una tras otra hasta que la condición es verdadera y cuando la condición se vuelve falsa, el código termina. Las siguientes son las declaraciones que pueden alterar el flujo de control en un programa de Ruby:

  1. romper declaración
  2. próxima declaración
  3. declaración de rehacer
  4. declaración de reintento
  5. declaración de devolución
  6. instrucción lanzar/atrapar

    declaración de ruptura

    En Ruby, la instrucción Break se usa para salir de un bucle cuando la condición es verdadera. La declaración de interrupción se usa básicamente en el ciclo while porque en el ciclo while la salida se imprime hasta que la condición es verdadera, cuando la condición es falsa, el ciclo sale. La instrucción break se usa dentro del bucle. La declaración de ruptura se ejecuta mediante la palabra clave de ruptura . La declaración de ruptura también se puede usar en declaraciones de control de caso , mientras y for .

    Sintaxis:

    break

    Ejemplo:

    # Ruby program to illustrate break statement
       
    #!/usr/bin/ruby  
      
    i = 1
      
    # using while loop
    while true   
      
        if i * 6 >= 30
              
            # using break statement
            break  
              
        # ending of if statement    
        end   
          
        puts i * 6   
        i += 1
          
    # ending of while loop
    end  

    Producción:

    6
    12
    18
    24
    

    Explicación: En el ejemplo anterior, la instrucción break se usa para detener la ejecución del ciclo while cuando la condición if i * 6 >= 30 se vuelve verdadera. De lo contrario, el bucle va a infinito.

    próxima declaración

    En Ruby, la siguiente declaración se usa para saltar al siguiente iterador del ciclo dado. La siguiente declaración es idéntica a la declaración de continuación en lenguaje C y Java. Cuando se utilice la siguiente instrucción, no se realizará ninguna otra iteración. Generalmente, la siguiente declaración se usa en bucles for y while .

    Sintaxis:

    next

    Ejemplo:

    # Ruby program to illustrate next statement
       
    #!/usr/bin/ruby  
      
    # using for loop
    for t in 0...10 
      
       # using if statement  
       if t == 5 then 
      
         # using next statement  
          next
      
      # ending of if   
       end   
      
       # displaying values
       puts t 
      
    # end of for loop  
    end  

    Producción:

    0
    1
    2
    3
    4
    6
    7
    8
    9
    

    Explicación: En el programa anterior, 5 no se imprimirá en la salida debido a la siguiente instrucción. Entonces, aquí en 5 , la próxima declaración hará que se salte y continúe desde la siguiente declaración en el programa.

    Declaración de rehacer

    La instrucción redo se usa para reiniciar la iteración actual de un bucle o el iterador. Hay una diferencia entre la instrucción redo y next. La siguiente instrucción siempre transfiere el control al final del ciclo, donde la instrucción posterior al ciclo puede comenzar a ejecutarse, pero la instrucción redo transfiere el control nuevamente a la parte superior del bloque o ciclo para que la iteración pueda comenzar de nuevo.

    Sintaxis:

    redo

    Ejemplo:

    # Ruby program to demonstrate the redo statement
      
    # defining a variable
    val = 0
      
    # using while loop which should give
    # output as 0,1,2,3 but here it will 
    # output as 0,1,2,3,4
    while(val < 4
      
    # Control returns here when 
    # redo will execute
    puts val
    val += 1
      
    # using redo statement
    redo if val == 4
      
    # ending of while loop
    end

    Producción:

    0
    1
    2
    3
    4
    

    Explicación: En el programa anterior, la instrucción redo transferirá el control a puts val, que es la primera expresión del ciclo while . No va a volver a probar la condición del bucle ni a buscar el siguiente elemento del iterador. Entonces, aquí while loop imprimirá 0,1,2,3,4 en lugar de 0,1,2,3 .

    declaración de reintento (en desuso en versiones recientes)

    La declaración de reintento se usa para reiniciar un iterador en función de una determinada condición o cualquier invocación de método desde el principio. En palabras simples, la declaración de reintento transfiere el control al principio. Por lo general, rara vez se usa una declaración de reintento. Solo funcionará hasta la versión 1.8 de Ruby .

    Nota: la declaración de reintento se eliminó de la versión 1.9 de Ruby en adelante porque se considera una función de idioma obsoleta. Por lo tanto, difícilmente se ejecutará en IDE en línea porque usa principalmente una versión superior a 1.8 .

    Sintaxis:

    retry

    Ejemplo:

    # Ruby program to demonstrate the retry statement
      
    # variable
    var = 7
      
    # Iterate 7 times from 0 to 7-1
    var.times do |val| 
      
    # display iteration number
    puts val 
      
    # If we've reached 6
    if val == 6
      
    # Decrement val and user won't
    # reach 6  next time
    var = var - 1 
      
    # Restart the iteration
    # using retry statement
    retry 
      
    # end of if 
    end
      
    # end of do..end
    end

    Producción:

    0
    1
    2
    3
    4
    5
    6
    0
    1
    2
    3
    4
    5
    

    Explicación: En el programa anterior, cuando el control va a la declaración de reintento, transfiere ese control a var.times do |val| . Ahora aquí se actualiza el valor de la variable var, es decir , 5 . Por lo tanto, el usuario no llegará a 6 la próxima vez y la declaración de reintento no se ejecutará nuevamente.

    declaración de devolución

    Esto se usa para salir de un método, con o sin un valor. Siempre devuelve un valor a su llamador. Hay muchas opciones con la declaración de devolución. Si no se usa una expresión con la declaración de devolución, siempre devuelve el valor del método como nil. Una lista de expresiones después de la declaración de retorno siempre está separada por una coma (,). En este caso, el valor del método será una array que contiene los valores de esas expresiones especificadas.

    Ejemplo:

    # Ruby program to demonstrate the return statement 
      
    #!/usr/bin/ruby
      
    # defining a method 'geeks'
    def geeks
          
       # variables of method
       val1 = 61
       val2 = 55
      
    # returning multiple values   
    return val1, val2
      
    # this statement will not execute
    puts "Hello Geeks"
      
    # end of the method
    end
      
    # variable outside the method to 
    # store the return value of the method
    value = geeks
      
    # displaying the returned values
    puts value

    Producción:

    55
    61
    

    Explicación: En el ejemplo anterior, el método geeks tiene una declaración de devolución que devuelve los dos valores, es decir, val1 y val2 , a quien llama. Aquí valor es la variable que almacenó los valores devueltos. El punto importante es que la declaración pone «Hello Geeks» después de la declaración de devolución no se ejecuta porque las declaraciones posteriores a la declaración de devolución no se ejecutarán dentro de un método.

    Sentencia lanzar/atrapar

    throw y catch se utilizan para definir una estructura de control que puede considerarse como una ruptura de varios niveles. throw se usa para romper el ciclo actual y transferir el control fuera del bloque catch . Lo mejor de throw es que puede romper el bucle o los métodos actuales o podemos decir que puede cruzar cualquier número de niveles. Aquí, catch define un » bloque etiquetado » de código que hace que salga por el bloque throw. Se discutirán más detalles en la sección Manejo de excepciones de Ruby.

    Ejemplo:

    # Ruby program to illustrate the throw/catch statement
    # for altering the control flow
      
    # defining a method
    def lessNumber(num)
          
        # using throw statement
        # here 'numberError' is its label
        throw :numberError if num < 10
          
        # displaying result 
        puts "Number is Greater than 10!"
    end
      
      
    # catch block
    catch :numberError do
          
        # calling method
        lessNumber(11)
        lessNumber(78
          
        # exits catch block here
        lessNumber(7)
        lessNumber(4)
    end
      
    puts "Outside Catch Block"

    Producción:

    Number is Greater than 10!
    Number is Greater than 10!
    Outside Catch Block
    

    Explicación: En el programa anterior, 11 se pasa al método lessNumber para verificar si es mayor que 10 o no. 11 es mayor que 10, por lo que la declaración se imprimirá en la pantalla y se ejecutará la siguiente declaración del bloque catch . Ahora se pasa 78 a la llamada al método, que se verifica y es mayor que 10, por lo que la declaración se imprimirá en la pantalla. Pero tan pronto como se pasa 7, que es menor que 10 , se lanza: numberError hace que el bloque catch salga y todas las declaraciones se salten y se imprimirá la última declaración «Fuera del bloque Catch». Entonces, aquí, tan pronto como la condición se vuelve falsa , throw hace que el bloque catch salga de la ejecución del bloque catch.

Publicación traducida automáticamente

Artículo escrito por ankita_saini 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 *