Menu
Coddy logo textTech

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 saved

C'est la même chose que :

if age >= 18
  puts "Adult"
end

unless saved
  puts "Save your work"
end

La 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?("#")
end

Comme 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.

challenge icon

Défi

Facile

Lisez 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> si n > 0
  • Affichez negative: <n> à moins que n >= 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: 2

Aide-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 saved

Utile 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`
quiz iconTestez-vous

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