Python'un nesne yönelimli this.method()
ve yordamsal / işlevsel method(this)
sözdizimi kombinasyonunu çok rahatsız edici buluyorum :
x = [0, 1, 2, 3, 4]
x.count(1)
len(x)
any(x)
x.reverse()
reversed(x)
x.sort()
sorted(x)
Bu özellikle kötüdür, çünkü çok sayıda işlev (yöntemlerden ziyade) yalnızca küresel ad alanına dökülür : listeler, dizeler, sayılar, yapıcılar, metaprogramlama, hepsi alfabetik olarak sıralanmış büyük bir listede karıştırılmıştır.
En azından, F # gibi işlevsel diller, tüm işlevlerin modüllerde düzgün bir şekilde adlandırılmış:
List.map(x)
List.reversed(x)
List.any(x)
Yani hepsi birlikte değil. Ayrıca, bu kütüphane boyunca takip edilen bir standarttır, bu yüzden en azından tutarlı.
İşlev vs yöntem şeyini yapmanın nedenlerini anlıyorum ama hala bunları bu şekilde karıştırmanın kötü bir fikir olduğunu düşünüyorum. En azından ortak işlemler için yöntem sözdizimini izlerseniz çok daha mutlu olurum:
x.count(1)
x.len()
x.any()
x.reverse()
x.reversed()
x.sort()
x.sorted()
Yöntemlerin değişip değişmediği, nesnede yöntem olarak kullanılmasının çeşitli avantajları vardır:
- Veri türündeki "genel" işlemleri aramak için tek yer: diğer kütüphaneler / etc. veri türlerine yapabilecekleri başka süslü şeyler de olabilir, ancak "varsayılan" işlemlerin tümü nesnenin yöntemlerindedir.
Module
Ararken tekrarlamaya gerek yok Module.method(x)
. Yukarıdaki işlevsel Liste örneğini alırsak, neden sürekli tekrar tekrar söylemem List
gerekiyor? Bunun bir olduğunu bilmeli List
ve Navigation.map()
üzerinde bu fonksiyonu çağırmak istemiyorum ! x.map()
Sözdizimini kullanmak onu KURU ve tutarsız tutar.
Ve elbette , bunu yapmanın herşeyi küresel isim alanına yerleştirme yöntemine göre avantajları var. Şu anki yolun işleri halledemediği bir şey değil. len(lst)
Hiçbir şey isim alanı olmadığından, oldukça hoş ( ) bile var ! İşlevleri (varsayılan davranış vb.) Yöntemlerde kullanmanın avantajlarını biliyorum, ancak yine de hoşuma gitmiyor.
Sadece dağınık. Ve büyük projelerde, dağınıklık en büyük düşmanınızdır.