Ad operatörü ...

7 Cevap php

Birisi tam ad operatörü olarak ters eğik çizgi kullanarak bu kadar kötü ne olduğunu bana açıklayabilir misiniz? I'v bu konuda sözleri scoffing çok okumak. Bir StackOverflower bile o bunu nedeniyle PHP vazgeçti söyledi.

Evet eğik çizgi dizeleri içinde kaçış karakteri gibi özel bir anlamı olduğunu biliyorum, ama gerçekten herhangi bir -> kullanarak daha kötü, ya da nokta . diğer birçok dilde de böyle değil.

Bu tür bunlar Wii adını duyurdu Nintendo tüm alaycı hatırlatıyor. Herkes büyük bir yaygara ve sonra da dışarı bir kez yapar ve buna alışık, kimsenin umurunda ve onlar üzerinde hareket ettirin.

Yani, beni aydınlatmak lütfen. Bu konuda ne kadar kötü? Bunun yerine ne önerdi olurdu?

7 Cevap

What's so bad about it: Aşağıdaki kodda hata spot miyim?

if(class_exists("namespace1\namespace2\myClass"))
    echo "This will never be true";

What would I have suggested: Ne yazık ki, '\' mevcut tek tek tek karakter. Ad ayırıcı olarak '|' anahtar kelimeler (bunlar çok az kullanılan konum olarak görme) ve kullanmak | PHP6 tasarlamak için mayın olsaydı, ben (~ ^, &,) tüm bitsel operatörlerin yerini alacak. Aslında ben çok okumak ve yazmak için PHP kolaylaştırmak için daha basit sözdizimi değişiklikleri öneririm, ama sadece bunun yerine Python kullanmak daha kolay ...

Onunla sorun neredeyse her bağlamda kaçış karakteri olmasıdır. Bu demektir ki insanlar olacak yanlışlıkla karışıklık o kadar, ama gözlerin bir meta-karakteri, yerine sadece bir sembol olarak bir ters eğik çizgi okumak için ayarlanmış çünkü o da zor okumak için yapar.

Ben aslında bir noktada öne sürüldü üç nokta üst üste, tercih ederdik.

Ben özellikle iyi bir neden için sözdizimi yeniden keşfetmiş bir dil Ayrıca istenirse, ben Ruby kullanmak istiyorum.

Ad olarak "\" kullanarak Eh, başka bir sorun vardır.

  1. It's the escape character. If you have to use \ in "string" and \ in 'string'. I feel someone will mess with it at somepoint. Soon or later. the escap char will catch you.
  2. '\' çok iyi her klavyede yer değildir. Benim klavyede ben her başkalarına gerçekten yakın değildir ve bazen sadece bir ağrı anahtarının bir arada kullanmak zorunda. O '^' gibi kötü değil iken. Diğer bir deyişle, belirli klavye haritası üzerinde ad erişmek için gereken akıcı kod yazmak mümkün olmayacaktır.
  3. Onlar seçildi ve nasıl saçma sonuçlar hatırlıyorum. Bu, diğer karakter daha basit ve daha az yazmaya çünkü onlar seçti. Dürüst olmak gerekirse, tüm klavye düzenine bağlıdır.

That's all the reason I can find why it might be a bad thing to use the escape character. To be honest, I'm still waiting for the language that will create his own unicode symboles. So it would give much more flexibility on which operator you can override. Let say in c++ you could write something like.

bool operator ≤ (Dog dog);
//and then do this
if(myDog ≤ thisDog){
}
//Seems useful?
bool operator ≅ thisDog){ 
  // this wouldn't check for equality 
  // but for something close to it
}

Kendi keyfi operatörünü kullanmak için güçlü olmak grup şeyler + kullanarak çok daha mantıklı ... "∪" çok daha mantıklı olurdu ... Ve sen kavşak almak istiyorsanız sadece "∩" ve o zaman insanlar diyebilirsiniz. . "ne bizim yazı bu karakter yoksa?" Ben sadece cevap verebilir: "Onlara sahip bir yazı bulun!!"

Resmi RFC ve destek belgeler bulunabilir

Bunlar, bir IRC log about the decision process içerir.

Alıntı Bölüm "Problems"

  • \ / gibi bir çok görünüyor ve özellikle Unix kullanıcıları için, yanlışlıkla çevirmek kolaydır
  • \ kaçan için kullanılır
  • bir dize içinde bir ad alanı adı olur \\like\\this ya da biz garip karakterler alabilirsiniz. Bu ilk başta kullanıcılara kafa karıştırıcı olabilir.
  • Varolan tüm alanlı kod neredeyse yeniden gerekir, basit bir arama / :: mümkün olmazdı arasında değiştirin.
  • yama motorun çok dokunur ve titiz savaş-test edilmesi gerekiyor.
  • birçok \this\way İlk başta garip bakacağız.

Alay herhangi bir "nedeniyle" sözü nedeniyle görüş üstünde ya da kişisel olduğunu muhtemeldir belirtiyor. Örneğin ben, özellikle ben çift ters eğik çizgi kullanmak zorunda dizeleri, yazmak için onları oldukça okumak çirkin ve hantal buluyorum. Ama sonra tekrar, ben daha sık onları kullanmak buna alışmak.

en aşağıdaki ad varsayalım:

jp\nintendo\rvl\testing

Eğer hataları fark ettiniz?

Gerçek (içsel) ad böyle büyük olasılıkla bir şey:

jp
intendo
vl  esting

Bunun çözümü her zaman pencereleri dosya bu nasıl kullandığınıza benzer bir ad seperatörünün olarak iki ters eğik çizgi kullanmaktır.

Bu gerçek ad ayırıcı 1 tek literal ters eğik çizgi, genişler, bir kaçış dizisi kendisi gibi iki ters eğik çizgi kullanarak, tamamen Zararsız olduğunu.

Biz (ayırıcı tabaka olarak 2 backslash'lar kullanarak) bir ad olarak

jp\\nintendo\\rvl\\testing
kullanırsanız, şimdi gerçek (iç) ad olur:
jp\nintendo\rvl\testing

Asıl soru neden sadece / gibi koymadı, nedir? Ben şahsen bir kaçış karakteri çünkü \ nefret ... benim için vidalar her up ki!