Qual è il significato di fare in Ruby?

Qual è il significato di fare in Ruby?

Ruby è un linguaggio di programmazione incredibile pieno di caratteristiche e strumenti moderni per la maggior parte degli ambienti di sviluppo. Ruby ha una funzione potente e spesso trascurata: blocchi.

L'essenza di questo articolo è discutere e capire quali sono i blocchi di rubini, come funzionano e come possiamo usarli nei nostri programmi Ruby.

Inizieremo con la sintassi di base e quindi discuteremo di funzionalità come il rendimento, che possono essere intimidatorie per i nuovi utenti di Ruby.

Cosa sono i blocchi di rubini?

Come nel caso di altri linguaggi di programmazione, un blocco o una chiusura è una funzione anonima che si racchiude all'interno di parole chiave DO e fine per blocchi in linea.

I blocchi consentono di raggruppare un blocco di codice in componenti separati che è possibile passare durante la chiamata del metodo come parametri.

Esistono due modi per definire un blocco in Ruby: il primo è usare la parola chiave DO ... End, l'altro sta usando una coppia di bretelle.

Do ... il blocco finale viene utilizzato principalmente quando si definisce un blocco di codice che si estende a più righe, mentre le parentesi graffe vengono utilizzate quando si definiscono un blocco di codice che si estende.

Passano gli argomenti di un blocco tra una coppia di personaggi di pipa | |

SUGGERIMENTO: Se si utilizza una singola riga o un blocco multi-riga, la funzionalità non cambia. Tuttavia, per scopi di leggibilità, utilizzare le parentesi graffe per un blocco di riga singolo e do-end per blocchi multiline.

Esempio di base

Di seguito sono riportati due semplici esempi di un blocco rubino, uno che usa le parentesi graffe mentre l'altro usa ... end.

# linea singola -
['Java', 'c', 'c ++'].ciascuno | i | mette i
# multi -line -> do ... fine
['Java', 'c', 'c ++'].ognuno do | i |
mi mette
FINE

Entrambi gli esempi sopra producono risultati simili:

  • Giava
  • C
  • C++

L'esempio sopra applica i blocchi di rubini nella forma più semplice: passiamo il blocco in ciascun metodo dell'oggetto array. Passa gli argomenti del blocco all'interno di una coppia di caratteri tubo; Nell'esempio sopra, l'argomento è io. Infine, emettiamo la funzionalità del blocco all'interno del corpo del blocco (in questo esempio, mette).

Comprensione della parola chiave di rubino

È possibile utilizzare i blocchi di rubini all'interno di un metodo standard. La funzionalità per eseguire quell'azione è per gentile concessione della parola chiave di rendimento.

Discutiamo in dettaglio la parola chiave di rendimento.

Cos'è la resa in Ruby?

Il rendimento delle parole chiave in Ruby consente di chiamare un blocco definito all'interno di un metodo Ruby.

Come funziona

Consideriamo un esempio che ci aiuterà a capire come funzionano la parola chiave di rendimento. Considera il semplice metodo Ruby mostrato di seguito:

def
mette "ciao!"
FINE

L'esempio sopra è un semplice metodo Ruby che stampa “Ciao!".

Se vogliamo aggiungere maggiore flessibilità al programma, possiamo consentire all'utente di passare un argomento durante l'invocazione del metodo.

Quindi, possiamo codificare il metodo come:

def hello (nome)
mette "ciao" + nome
FINE
ciao ("USA")

Nel secondo esempio, abbiamo un po 'di flessibilità in quanto possiamo passare qualsiasi nome al metodo come argomento.

Possiamo estenderlo ulteriormente usando un blocco Ruby. Quando passiamo il blocco all'interno del metodo, verrà eseguito e restituirà i risultati.

Definizione del metodo di rendimento

Per creare un metodo che accetta un blocco, utilizziamo il rendimento delle parole chiave. La sintassi generale è come mostrato:

def
prodotto
FINE

Su definizione, possiamo chiamare il metodo e passare un blocco di codice. Il metodo eseguirà il codice e restituirà il risultato.

Passando un blocco Ruby a un metodo

Possiamo passare un blocco al metodo usando la sintassi del blocco. Ad esempio, possiamo chiamare il metodo sopra con una sintassi come:

ciao mette "ciao mondo"

Finché il metodo contiene la parola chiave di rendimento, è possibile passare qualsiasi blocco di codice ed eseguirlo.

NOTA: Una volta definita una parola chiave di rendimento all'interno di un metodo, è necessario passare un blocco quando si chiama il metodo. Altrimenti, otterrai un errore "nessun blocco dato (rendimento)".

Esempio 2

Facciamo un altro esempio:

def
mette "prima del rendimento."
prodotto
mette "dopo il rendimento."
FINE
ciao pura "I rendo"

L'esempio sopra illustra come funziona l'esecuzione di un metodo usando il rendimento. L'output del programma è di seguito:

prima della resa
Sono un rendimento
dopo la resa

Argomenti di Ruby Block

Ruby ti consente di passare argomenti al blocco Ruby. Gli argomenti del blocco sono definiti nel blocco di resa e fungono da parametri del blocco.

L'ordine in cui si passa l'argomento è fondamentale in quanto il blocco li accetterà nell'ordine impostato.

def
Resa ("John Doe", 20)
FINE
ciao | nome, età | mette "ciao #nome, sei #age anni"

I parametri definiti all'interno del blocco hanno un ambito locale e sono disponibili solo nel contesto del blocco.

Quindi, otterrai una variabile indefinita usata all'esterno dell'ambito del blocco.

Esempio 3

La funzionalità del blocco non cambia su blocchi a linea singola o multipla. Possiamo illustrare questo usando l'esempio seguente:

area def
Resa (7)
FINE
area fare
mette "L'area del Cirle è #7 * 3.14159 cm2 "
FINE

L'output dall'esempio sopra è:

L'area del Cirle è 21.99113cm2

Ciò dimostra che i blocchi multi-line o singole, la funzionalità rimane la stessa.

Blocchi espliciti

Negli esempi precedenti, abbiamo definito i blocchi come impliciti. Tuttavia, possiamo anche descriverli come espliciti.

I blocchi espliciti significano che assegniamo un nome all'elenco dei parametri del metodo.

Def Esempio (& Block)
bloccare.chiamata
FINE
Esempio mette "esplicito blocco esempio"

Passa il nome del blocco all'interno dopo l'ampa e. Usando il nome del blocco, è possibile passare il blocco salvato a un altro metodo.

Blocca la gestione degli errori

Nelle sezioni precedenti, abbiamo menzionato che il blocco di resa è obbligatorio. Tuttavia, è possibile implementare una semplice logica di gestione degli errori se viene fornito il rendimento. Lo facciamo usando Block_Given? Metodo del kernel.

Il metodo restituisce un valore booleano di true se il rendimento è disponibile e falso se non diversamente.

Considera il semplice esempio di seguito:

def
Se block_given?
prodotto
altro
mette "Niente è successo ... [errore]"
FINE
FINE

Se chiamiamo il metodo con il valore del rendimento richiesto, l'output sarà:

ciao mette "ciao lì!"
Ciao!

D'altra parte, chiamare il metodo senza rendimento eseguirà il blocco else come:

Ciao
Niente è successo ... [errore]

Usando il valore da block_given? Metodo, è possibile implementare la logica di gestione degli errori quando non esiste un valore di snervamento.

Conclusione

In questa guida, abbiamo discusso di Ruby Blocks, cosa sono, come funzionano e come usarli nei tuoi progetti.

Grazie per la lettura!