do..end vs Accolades
Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 16 sur 56.
Ruby vous offre deux façons d'écrire un bloc. Elles signifient la même chose, mais chacune a un cas d'utilisation privilégié.
do...end est utilisé pour les blocs multi-lignes :
[1, 2, 3].each do |n|
doubled = n * 2
puts "#{n} -> #{doubled}"
endLes accolades { ... } sont utilisées pour les blocs sur une seule ligne, courts, sous forme d'expression :
[1, 2, 3].each { |n| puts n * 2 }Les deux ont une priorité légèrement différente, mais la règle dont les apprenants ont besoin est celle du style : des accolades pour les instructions sur une seule ligne, do...end pour le multi-ligne.
Les deux formes peuvent retourner une valeur. La dernière expression du bloc est ce qui est renvoyé aux méthodes comme map :
[1, 2, 3].map { |n| n * 10 } # [10, 20, 30]
[1, 2, 3].map do |n|
n * 10
end # [10, 20, 30]Défi
FacileLisez une liste d'entiers séparés par des virgules depuis l'entrée. Affichez deux lignes :
- Chaque nombre doublé, joint avec
,. Utilisez la forme avec accolades demap. - La chaîne
"<n> squared is <n*n>"pour chaque nombre, un par ligne. Utilisez la formedo...enddeeach.
Pour l'entrée 1,2,3, la sortie est :
2, 4, 6
1 squared is 1
2 squared is 4
3 squared is 9Aide-mémoire
Les blocs Ruby ont deux syntaxes :
Les accolades { ... } pour les blocs d'une seule ligne :
[1, 2, 3].map { |n| n * 2 } # [2, 4, 6]do...end pour les blocs multi-lignes :
[1, 2, 3].each do |n|
doubled = n * 2
puts "#{n} -> #{doubled}"
endLes deux formes retournent la dernière expression du bloc (utilisée par des méthodes comme map).
Essayez vous-même
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: ligne 1, doublée, forme avec accolades de map, jointe avec ", "
# TODO: lignes 2..n, carrés, forme do...end de each
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Les chaînes de caractères en profondeur
Aperçu des méthodes de chaînesInterpolation de chaînesParcourir les chaînesSplit et JoinRécapitulatif - String Weaver4Blocs, Procs & Lambdas
Qu'est-ce qu'un bloc ?do..end vs AccoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes - Partie 2
Hash.new avec des valeurs par défautItérer sur les HashesHashes imbriquésFusion et transformationRécapitulatif - Compteur de fréquence10Projet - Dossiers étudiants
Présentation du projetAjouter un étudiant2Intervalles
Qu'est-ce qu'un intervalle ?Méthodes d'intervalleLes intervalles dans Case / WhenRécapitulatif - Pratique des intervalles5La puissance d'Enumerable
Select et RejectChaîner MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Data Pipeline