if / unless en ligne
Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 41 sur 56.
Ruby vous permet de placer if et unless à la fin d'une seule instruction, en tant que modificateur sur une seule ligne. Cela se lit presque comme de l'anglais.
puts "Adult" if age >= 18
puts "Save your work" unless savedC'est la même chose que :
if age >= 18
puts "Adult"
end
unless saved
puts "Save your work"
endLa forme en ligne est idéale pour les vérifications de type « garde » (guard-style) au début d'une méthode, ou pour des mises à jour conditionnelles ponctuelles à l'intérieur d'une boucle :
return if name.nil? || name.empty?
counts = Hash.new(0)
words.each do |w|
counts[w] += 1 unless w.start_with?("#")
endComme pour l'opérateur ternaire, utilisez des modificateurs en ligne pour les instructions courtes. Si le corps doit comporter plus d'une seule ligne, écrivez plutôt un véritable bloc if.
Défi
FacileLisez une liste d'entiers séparés par des virgules. Pour chaque nombre, affichez une ligne, mais seulement quand le nombre est non nul :
- Affichez
positive: <n>sin > 0 - Affichez
negative: <n>à moins quen >= 0
Les deux lignes doivent utiliser la forme de modificateur en ligne (pas de bloc if, pas de else). Après la boucle, affichez Skipped zeros: <count>, où le compte est le nombre de zéros, également calculé sans bloc if (utilisez count).
Pour l'entrée 3,-2,0,5,0, la sortie est :
positive: 3
negative: -2
positive: 5
Skipped zeros: 2Aide-mémoire
Ruby permet d'utiliser if et unless comme modificateurs en ligne à la fin d'une instruction unique :
puts "Adult" if age >= 18
puts "Save your work" unless savedUtile pour les clauses de garde ou les mises à jour conditionnelles simples :
return if name.nil? || name.empty?
counts[w] += 1 unless w.start_with?("#")Utilisez les modificateurs en ligne uniquement pour les corps d'une seule ligne ; utilisez un bloc if complet pour tout ce qui est plus long.
Essayez vous-même
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: afficher en utilisant `if` / `unless` en ligne pour chaque nombre
# TODO: afficher Skipped zeros: <n> en utilisant `count`
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 Pipeline8Prise de décision avancée
Case avec Classes & Regexwhen à valeurs multiplesOpérateur ternaireif / unless en ligneRécapitulatif - Classificateur de notes