2012-11-06 9 views
6

Ich bin kein englischer Muttersprachler. Ich weiß, es klingt trotzdem dumm. Ich schreibe in Python & C. Aber ich kann nicht ganz verstehen, wie unless funktioniert.Kann nicht verstehen "außer" Stichwort in Ruby

Ist es gesund, von einem logischen Standpunkt aus daran zu denken? Betrachten Sie beispielsweise das Schlüsselwort if: if condition. Wenn condition wahr ist, wird der Code ausgeführt. Was ist die logische Erklärung für unless?

Gibt es eine andere Möglichkeit, darüber nachzudenken?

Antwort

6

Rubin, es sei denn Modifikator:

Syntax: Code, es sei denn bedingte

Code ausführt, wenn bedingte falsch ist.

Beispiel:

$var = 1 
print "1 -- Value is set\n" if $var 
print "2 -- Value is set\n" unless $var 

$var = false 
print "3 -- Value is set\n" unless $var 

Dies wird produzieren folgendes Ergebnis:

1 - Wert gesetzt

3 - Wert gesetzt

8

Der einfachste Weg ist: unless ist ein Gegenteil von if. Es arbeitet in den gleichen Orten (glaube ich) als if:

foo = nil 
puts "This will not show" if foo 
puts "But this will" unless foo 

if foo then 
    puts "This will not show" 
end 
unless foo 
    puts "But this will" 
end 

Es sieht im Code besser aus, wenn Sie unless foo schreiben statt if !foo - aber das ist nur meine Meinung. In der längeren Form können Sie sogar else verwenden, aber bitte , bitte nicht.

Hier ist ein set of rules to follow to make the code more readable.

23

unless x entsprechen if !x

-1

Hier ist ein weiterer Hinweis, was mich mit unless in rubin glücklich macht:

Zuerst in Situationen, in denen ich die Bedingung erwarten, falsch zu sein, und der Code wird normalerweise laufen , verwende ich unless:

unless name.empty? 
    puts "Hello #{name}" 
end 

Zweitens, wenn ich die Bedingung, um wahr zu sein, und der Code wird nicht normal laufen erwarten, verwende ich if not:

if not name == 'Awesome_Coder' 
    message.puts "Unauthorized!" 
end 
1

hungrig = true

es sei denn, hungrig

setzt "Ich schreibe Programme Rubin!"

sonst

puts "Zeit zu essen!"

Ende

Dies ist der einfache Weg zu verstehen,