"Bir dil hakkında nefret ettiğim şeyler" listelerinden nefret ettiğim beş şeye ne dersiniz? : D
5- Turuncu kırmızıyı boyamak onu elma yapmaz.
Bir dil tasarlandığında, tasarımcılar genellikle ne işe yaradığını akıllarında tutarlar. Şey bambaşka bunu kullanarak yapabilirsiniz çalışması, ancak yok olduğunda şikayet saçmasıydı. Python'u al. Eminim ya biri var ya da bir gün exe Python kodunu oluşturmak için bir yardımcı program yapacak eminim. Neden Tanrı'nın yeryüzünde sen olacağını istediğiniz bunu yapmak için? Düzgün olurdu - beni yanlış anlamayın - ama faydası yok. Yani bu konuda şikayet durdurmak!
İyi tasarlanmış bir proje muhtemelen birden fazla dilden kod içerecektir. Bu sadece bir dil ile bir projeyi tamamlayamayacağınız anlamına gelmez. Bazı projeler kullandığınız dilin yetenekleri dahilinde olabilir.
4- tahta ayakların üzerinde mi duruyorsun?
Platform, dilin yapabileceklerinin büyük bir etkisi olabilir. Günümüzde çöp toplayıcıları, hatta paskallar "çöp toplama" erken girişimi ile, bellek solmaya yardımcı olabilir (belki daha fazla koç malloc ??). Bilgisayarlar daha hızlıdır ve tabii ki, dillerimizden daha fazlasını bekliyoruz. Ve açıkçası, muhtemelen yapmalıyız. Ancak, derleyici karma tablolar veya dizeler veya diğer çeşitli kavramlar oluşturmak için kolaylık için ödemek için büyük bir fiyat var. Bunlar, kullanıldığı platforma miras alınmayabilir. Bir dile dahil etmenin kolay olduğunu söylemek, sadece ayakta duracak bir bacağın olmayabileceğini söylüyor.
3- kimin suçu gerçekten?
Hatalar. Bilirsin. Böcekleri seviyorum. Neden hataları seviyorum. Çünkü bu işimi sürdüreceğim anlamına geliyor. Böcek olmadan, birçok kapalı pizza dükkanı olurdu. Ancak, kullanıcılar hatalardan nefret eder. Ama burada biraz soğuk su sıçraması var. Her hata olduğunu programcılar hatası. Dil değil. Bu kadar katı bir sözdizimine sahip bir dil, kaç hatanın üretilebileceğini önemli ölçüde azaltacaktır, tamamen işe yaramaz bir dil olacaktır. Yetenekleri muhtemelen bir yandan sayılabilir. Esneklik mi yoksa güç mü istiyorsun? Böceklerin var. Neden? Çünkü mükemmel değilsin ve hatalar yapıyorsun. C'de gerçekten tanımlanabilir bir örnek alın:
int a[10];
for (int idx = 0; idx < 15; idx++) a[idx] = 10;
Bunun ne yapacağını hepimiz biliyoruz. Ancak, belki bazılarımızın farkına varmadığımız şey, işlevselliğin çok faydalı olabileceğidir. Ne yaptığınıza bağlı olarak. Arabellek taşmaları bu işlevin maliyetidir. Yukarıdaki kod. Eğer bunu gerçekten halka açıklasaydım. Yine .. benimle söyle .. "Benim hatam". Bunu yapmama izin verdiğim için C değil.
2- Bunu geri dönüşüm kutusuna koymamalıyız?
Anlamadığımız bir dilde bir özelliğe işaret etmek çok kolay çünkü sık kullanmıyor ve aptal olarak adlandırıyoruz. Orada olduğu gibi şikayet edin. Goto hep beni eğlendirir. İnsanlar her zaman goto'nun bir dilde varlığından şikayet ediyorlar. Yine de bahse girerim ki son programınız bir tür goto içerir. Daha önce bir mola ya da devam ettiyseniz, bir goto kullandınız. İşte böyle. Verilmiş, "güvenli" bir goto, ama ne olduğunu. Goto'nun kullanımları var. Devam et veya kes gibi "örtük" goto'ların kullanılıp kullanılmadığı veya açık gotos (herhangi bir dil için gerçek "goto" anahtar kelimesini kullanarak). Dil geliştiricileri kusursuz değildir, ancak tipik olarak ... işlevsellik zamanın başlangıcından beri mevcutsa (o dil için). Muhtemelen bu yön, o dilin tanımlayıcı bir kalitesidir. Anlamı .. it ' kullanılan ve büyük olasılıkla geriye dönük uyumluluk nedeniyle takılmıyor. Bugün kullanılıyor. 5 dakika önce olduğu gibi. Ve düzgün kullanılır. Şey ... tartışmasız birisi de yanlış kullanıyor, ama bu benim listemde # 3 ile ilgili.
1. - Her şey bir nesnedir.
Tamam .. bu gerçekten # 2'nin bir altkümesi. Ancak bu, nefret listelerinde gördüğüm en rahatsız edici şikayet. Her şey bir nesne değildir. Ait olmayan veya nesne olması gereken pek çok kavram vardır. Eşyaları ait olmadıkları bir yere koymak sadece çirkindir ve bir programın verimliliğini düşürebilir. Elbette. Belki dile bağlı çok fazla değil. Bu ayrıca # 5 ile ilgilidir. Bu ... evet. Global iyi. Statik yöntemlere uygulandığı gibi fonksiyonlar iyi. OO programlamanın küresel işlevlerle birleştirilmesi sorun yaratmaz. Şimdi .. bu, hepimizin dışarı çıkıp kodumuzu nesne modellerinden "serbest bırakmamız gerektiği" anlamına gelmez. Bir kod bölümü veya tüm bir proje tasarlarken, perde arkasında neler olması gerekirbir araya getirirken dikkat edin. Sadece bu kavramın yaşadığı yer ve diğer pek çok faktör değil. Neden hiçbir işe yaramazsa global işlevleri sınıflar veya isim alanı kavramları içinde kapatalım? Statik üye değişkenleri alın. Bu beni çok eğlendiriyor çünkü .. iyi ... Tabii ki dile ve uygulamaya bağlı olarak, ama genel olarak konuşursak, sadece bir küresel ilan ettiniz. Evet, bu OO olmayan kavramları OO sarmalayıcılarına sarmanın bazı nedenleri vardır. Tabii ki kendi kendini belgeleyen kod. Bu mantıklı olabilir. Yani .. dediğim gibi. Dışarı çıkmayın ve kodunuzu "serbest bırakmayın". Ancak, iyi bir modern dilin OO modellemesi dışında küresel bir konsepti olacaktır. Evet, özellikle küresel bir konsepti olmayan bir OO programlama dilinin ciddi bir tasarım kusuruna sahip olduğunu belirtmek istiyorum. Yine de .. dilin niyetine ve tasarımına bağlıdır, bu yüzden belirli bir dili seçmeye çalışmıyorum ve burada analiz etmek için çok fazla şey var. Her halükarda, kodun nerede yaşayacağını ve en etkili olması gerektiğini düşünün. İşlev veya destek eklemeyen bir şeye bir sürü parlama eklemek klavyeyi daha hızlı yıpratır. Kimseye faydası yok. Şey ... Eğer muhtemelen size yanlış bir şekilde her şeyin bir nesne olduğunu öğreten kişiden kek puanları sevmiyorsanız.
Kısacası, programlama sadece dikkatsizce klavyeye dokunmakla kalmıyor. Herhangi bir proje için birçok tasarım düşüncesi vardır. Klişe olduğunu biliyorum, ama ona her açıdan bakmalısın. Günümüzde güvenli metinlerle bile. Sadece kodun dışına çıkmaz ve iyi çalışmasını beklemezsiniz. Elbette .. işe yarayabilir, ancak bu konuda doğru yol olmayabilir. Genel olarak, belirli bir iş VE çevre için en uygun dili ve formatı seçin. Fakat hiçbir dil onun arkasındaki düşünceyi ortadan kaldırmaz. Eğer düşünmüyorsanız .. sadece yazıyorsunuz.