Pek çok dil, Python da dahil olmak üzere bir ifadeden ziyade bir atama yapma yolunu seçiyor:
foo = 42 # works
if foo = 42: print "hi" # dies
bar(foo = 42) # keyword arg
ve Golang:
var foo int
foo = 42 # works
if foo = 42 { fmt.Printn("hi") } # dies
Diğer diller atamalara sahip değildir, ancak kapsamlaştırılmış bağlar, örneğin OCaml:
let foo = 42 in
if foo = 42 then
print_string "hi"
Ancak, let
bir ifadenin kendisidir.
Atamaya izin vermenin avantajı, koşullu içindeki bir işlevin dönüş değerini doğrudan kontrol edebilmemizdir, örneğin bu Perl parçacığında:
if (my $result = some_computation()) {
say "We succeeded, and the result is $result";
}
else {
warn "Failed with $result";
}
Perl ayrıca beyanı yalnızca bu şartlı için kapsamlaştırır, bu da onu çok faydalı kılar. Ayrıca orada bir yeni değişken tanımlamaksızın bir koşullu içine atarsanız if ($foo = $bar)
uyarır, uyarmaz, uyarmaz if (my $foo = $bar)
.
Ödevi başka bir ifadede yapmak genellikle yeterlidir, ancak kapsam belirleme sorunları getirebilir:
my $result = some_computation()
if ($result) {
say "We succeeded, and the result is $result";
}
else {
warn "Failed with $result";
}
# $result is still visible here - eek!
Golang, hata kontrolü için dönüş değerlerine büyük ölçüde güvenmektedir. Bu nedenle, koşullu bir başlatma ifadesi almasına izin verir:
if result, err := some_computation(); err != nil {
fmt.Printf("Failed with %d", result)
}
fmt.Printf("We succeeded, and the result is %d\n", result)
Diğer diller, bir koşul içinde boolean olmayan ifadelere izin vermemek için bir tür sistemi kullanır:
int foo;
if (foo = bar()) // Java does not like this
Tabii ki bir boole döndüren bir işlev kullanılırken başarısız oluyor.
Kazara görevlendirmeye karşı savunmak için farklı mekanizmalar gördük:
- İfade olarak atamaya izin verme
- Statik tip kontrolü kullan
- Atama mevcut değil, sadece
let
bağlarımız var
- Başlatma ifadesine izin ver, aksi halde atamaya izin verme
- Bir şartlı içinde bildirmeden atama atama
Onları artan tercih sırasına göre sıraladım - ifadelerin içindeki atamalar yararlı olabilir (ve açık bir bildirim sözdizimine ve farklı bir adlandırılmış argüman sözdizimine sahip olarak Python'un sorunlarını aşmak kolaydır). Fakat aynı etkiye birçok seçenek olduğu için onlara izin vermemeliyiz.
Hatasız kod, kısa koddan daha önemlidir.