Qu'est-ce qu'un opérateur de référence sûr (&.) Utilisant Ruby Ampasand?

introduction

Lorsque la variable est «nil», certaines méthodes peuvent provoquer une erreur.

Par exemple, si vous utilisez ʻeach pour transformer une liste de valeurs emballées dans un tableau pour un certain traitement, et si nil` est inclus, le traitement s'arrêtera et une erreur se produira. .. Ce serait un problème si quelque chose arrivait.

Dans un tel cas, vous pouvez éviter nil en faisant next if [variable] .nil? Avec ** clause de garde ** (une méthode d'implémentation pour supprimer l'exception au début de la fonction ou du processus itératif). Oui, mais j'aimerais faire une remarque lorsqu'il existe une autre méthode qui applique des opérateurs logiques.

Opérateur de référence de sécurité utilisant ampassand (&)

Tout d'abord, à partir de la conclusion, écrivez sous la forme «[objet] &. [Méthode]».

Par exemple

# Sans pour autant &
ary = [[1,2,3],nil,[5,6]]

 ary.each do |element_ary|
  p element_ary.length
end

=>

3
Traceback (most recent call last):
	2: from test.rb:3:in `<main>'
	1: from test.rb:3:in `each'
test.rb:4:in `block in <main>': undefined method `length' for #nil:NilClass (NoMethodError)

# Avec &
ary = [[1,2,3],nil,[5,6]]

 ary.each do |element_ary|
  puts element_ary&.length
end

=>

3
nil
2

De cette façon, il n'y a aucune erreur.

principe

En fait, cela implique l'opérateur logique «&&».

En général, les opérateurs logiques ont les caractéristiques suivantes:

・ Évalué dans l'ordre de la gauche ・ Une fois que la vérité de l'expression logique est déterminée, les expressions restantes ne sont pas évaluées. -La valeur de la dernière expression évaluée devient la valeur de toute la logique

Autrement dit, lorsque «[Condition 1] && [Condition 2]» est trouvée, «[Condition 2]» n'est évaluée que lorsque «[Condition 1]» est vraie. En effet, si «[Condition 1]» est «nil» ou «false», le résultat de l'opérateur logique «&&» sera «nil» ou «false» sans évaluer la condition 2.

En appliquant ceci et en expliquant en utilisant l'exemple ci-dessus, il peut être écrit comme suit.

ary = [[1,2,3],nil,[5,6]]

 ary.each do |element_ary|
  p element_ary && element_ary.length
end

Lorsque «nil» est entré dans «élément_ary», le traitement de l'opérateur logique se termine au moment de «[condition 1]» et renvoie «nil», donc «nil» est ajouté à la méthode «length» de «[condition 2]». Ne traversera pas.

Il a été appelé l'opérateur de référence de sécurité qui pouvait être exprimé en omettant ceci et en ajoutant `` & '' après l'objet comme indiqué ci-dessous.

ary = [[1,2,3],nil,[5,6]]

 ary.each do |element_ary|
  p element_ary&.length
end

en conclusion

C'était un exemple d'application d'un opérateur logique, mais j'ai trouvé ça sympa.

Recommended Posts

Qu'est-ce qu'un opérateur de référence sûr (&.) Utilisant Ruby Ampasand?
Qu'est-ce qu'un module Ruby?
Qu'est-ce qu'une variable de type référence?
Qu'est-ce qu'un tableau bidimensionnel Ruby?
Qu'est-ce qu'un constructeur
Qu'est-ce qu'un flux
Qu'est-ce qu'un opérateur?
Qu'est-ce qu'un servlet?
Qu'est-ce qu'une classe wrapper?
Qu'est-ce qu'un type booléen?
Qu'est-ce qu'une virgule flottante?
Qu'est-ce qu'un commentaire significatif?
Qu'est-ce que Jersey? Implémentation de référence?
Créer un calendrier avec Ruby
Qu'est-ce qu'un fichier JAR?
Qu'est-ce qu'une collection Java?
Qu'est-ce qu'une expression lambda?
Créer une loterie avec Ruby
[Ruby] À quoi sert «!!»?
[Ruby] Qu'est-ce qu'une instance?
Qu'est-ce que Fat⁉ enum?
Qu'est-ce qu'un extrait de code en programmation?
Qu'est-ce qu'un type booléen de colonne?
Qu'est-ce qu'une expression lambda (Java)
Qu'est-ce qu'une classe en langage Java (3 /?)
Qu'est-ce qu'un terminal? -Chemin absolu et chemin relatif-
Qu'est-ce qu'un fichier .original Spring Boot?
[Note technique] Qu'est-ce que "inclure" dans Ruby?
[Pour les débutants en programmation] Qu'est-ce qu'une méthode?
Qu'est-ce qu'une classe en langage Java (1 /?)
Qu'est-ce qu'une classe en langage Java (2 /?)
[Rails] Qu'est-ce qu'un point (.) Ou un deux-points (:)?
Introduction aux fonctions récursives: qu'est-ce qu'une fonction récursive?
Ruby sum est une histoire sobre et étonnante