JavaScript'te programlama olarak, ifadelerle yapılabilecek her şeyin ve blokların sadece ifadelerle yapılabileceğini fark ettim. Bir programlama dili sadece ifadelerle iyi çalışabilir mi? Ve eğer evet ise, neden ifadeler hiç kullanılmıyor?
JavaScript'te programlama olarak, ifadelerle yapılabilecek her şeyin ve blokların sadece ifadelerle yapılabileceğini fark ettim. Bir programlama dili sadece ifadelerle iyi çalışabilir mi? Ve eğer evet ise, neden ifadeler hiç kullanılmıyor?
Yanıtlar:
Elbette. En basit yol, şu anda bir ifade olan her yapıya bir sonuç değeri atamak ve böylece onu bir ifadeye dönüştürmektir. Bu mutlaka yararlı veya anlamlı değildir. Tek potansiyel kazanç biraz kavramsal basitliktir. Ancak, eğer daha sonra noktalı virgül ve döngüler gibi şeyler kaldırmak için devam (yerine diğer operatörler ve fonksiyonlar yoluyla zincirleme gerektiren), programlar ağır kullanarak ifadeleri çirkin olur.
Bunu yapmanın daha radikal ama anlamlı bir yolu, dili neredeyse her şeyin anlamlı bir değere sahip olacak şekilde tasarlamak ve onu, diğer etkiler için değil, neredeyse her zaman bu anlamlı değer için bir ifade kullanacak şekilde kullanmaktır. İşlevsel programlama dilleri bunu yapar (bir dereceye kadar; Haskell'in ifadeleri olmayan bildirimleri vardır).
İfadeler kullanılır çünkü zorunlu paradigmada, yararlı bir sonuç değerine sahip olmayan birçok yaygın işlem vardır ve sıralı talimatlar (hesaplamalar yerine) kavramı bu paradigmaya oldukça iyi uymaktadır. Programınızın büyük bir yüzdesi yeni değerleri hesaplamak yerine durumu mutasyona uğratıyorsa, bir değer üretmeyi gerektirmez (for döngüsünün sonucu nedir?). Buna karşılık, tüm paradigmanız (FP) değerlerin hesaplanması üzerine kurulduğunda, sonuç değeri olmayan aykırı değerler bir istisna gerektirmez: Bunun yerine onlara bir şey ifade etmeyen bir sentinel sonucu verirsiniz.
void
Ve null
/ arasındaki fark unit
, ikincisinin değerler olması ve etrafından geçirilebilmesidir, oysa void
bu tipte bir değer olmaması özeldir.
"İfade" ve "ifade" yi nasıl tanımladığınıza bağlıdır.
Çok katı bir tanım, ifadeleri "yan etkileri olan ve belki bir dönüş değeri olan şeyler" ve ifadeleri "dönüş değerleri olan ancak yan etkileri olmayan şeyler" olarak ayırır. Böyle bir tanımla, en az bir ifade olmadan anlamlı bir program yazılamaz (bir ifadeyi değerlendirmek ve dönüş değerini çıkarmak zorunda kalır) - saf ifadeler tek başına program dışındaki dünya ile etkileşime giremez. Saf olmayan kısım dilin dışına ve destekleyici ekosisteme taşınırsa, tek başına bir dil yine de tamamen saf olabilir (yani herhangi bir ifade içermez) (dilin ifadeleri olduğu kadar tanımları da olmasına rağmen, Haskell'in yaptığı tam olarak budur) .
Bununla birlikte, ifadelerde yan etkilere izin verirseniz, ifadeler ve ifadeler arasındaki ayrım keyfi ve çok daha az ilginç hale gelir - elbette sadece ifadelerden oluşan bir programlama dili icat edebilirsiniz; Lisp lehçelerinin çoğu böyle çalışır. Böyle bir durumda, bir ifadeyi yan etkileri için değerlendirmek, bir ifadeyi yürütmekle hemen hemen aynıdır ve böyle bir dilde ifadelerin ve ifadelerin aynı şey olduğu iddia edilebilir. Bir ifade ile bir ifade arasındaki fark sadece sözdizimseldir.
Birçok dil hala bu sözdizimsel ayrımı yapmaktadır, çünkü teknik nedenlerle değil, okunabilirlik açısından yararlıdır. Bir şeyi ifade etmek, dönüş değeriyle ilgilendiğinizi gösterir, yan etkileri daha azdır; bunu ifade etmek okuyucuya yan etkilere neden olmayı düşündüğünüzü söyler ve dönüş değeri ilginç olabilir veya olmayabilir.
ATL ve Xtend ifadesiz iyi çalışan programlama dilleridir. Birçok işlevsel dil de ifadesizdir. Yani, evet bir programlama dili deyim olmadan düzgün çalışabilir. Bence ifadeler birçok dilde zorunlu programlamanın bir kalıntısı. Halen yaygın olarak tanındıklarından ve bazı durumlarda kodu daha okunabilir hale getirdikleri için hala kullanılmaktadırlar.
Evet.
İşlevsel diller (ve tekli atama dilleri) her şey bir ifadedir. Örnekler Haskal (ve SISAL). Burada hem if ifadeleri hem de döngüler için değer döndürür.
Başka dil sınıfları da var: Akla yayılan en kolay dil bildirimsel dillerdir (eminim ifadelere bağlı olmayan başkaları da vardır). Bu dillerin ifadelere bile ihtiyacı yoktur (normalde düşündüğünüz anlamda). Neyin doğru olduğunu beyan edersiniz ve birden çok sonuç elde edebilirsiniz. Buradaki kolay olan prolog
.