"Bir işlev için ideal argüman sayısı sıfırdır" oldukça yanlıştır. İdeal argüman sayısı, fonksiyonunuzun yan etkisiz olmasını sağlamak için gereken sayıdır. Bundan daha az ve gereksiz yere işlevlerinizin saf olmamasına neden olursunuz, böylece sizi başarı çukurundan uzaklaşmaya ve acı eğimine tırmanmaya zorlarsınız. Bazen "Bob Amca" onun tavsiyesi ile yerinde. Bazen olağanüstü derecede yanlıştır. Sıfır argüman tavsiyesi, ikincisinin bir örneğidir
( Kaynak: @David Arno'nun bu sitedeki başka bir sorunun altındaki yorumu )
Yorum, 133 upvotes muhteşem bir miktar kazandı, bu yüzden onun değerine biraz daha dikkat etmek istiyorum.
Bildiğim kadarıyla, programlamada iki ayrı yol var: saf fonksiyonel programlama (bu yorumun neyi teşvik ettiği) ve söylemeyin, sormayın (bu web sitesinde de zaman zaman tavsiye edilir). AFAIK bu iki ilke birbirinin zıtlığına yakın olarak temel olarak uyumsuzdur: saf fonksiyonel "sadece geri dönüş değerleri, hiçbir yan etkisi yoktur" olarak özetlenebilir, söyleme, sorma "hiçbir şeyi iade etme, msgstr "sadece yan etkileri var" + + msgid ". Ayrıca, biraz şaşırdım çünkü söyle, sorma OO paradigmasının çekirdeği olarak düşünülürken saf funcitonlar fonksiyonel paradigmanın çekirdeği olarak kabul edildi - şimdi OO'da önerilen saf fonksiyonları görüyorum!
Sanırım geliştiriciler muhtemelen bu paradigmalardan birini seçmeli ve ona bağlı kalmalı mı? İtiraf etmeliyim ki kendimi de asla takip etmeye getiremedim. Çoğu zaman bir değer döndürmek benim için uygun görünüyor ve sadece yan etkilerle elde etmek istediğim şeyi nasıl elde edebileceğimi gerçekten göremiyorum. Çoğu zaman yan etkilere sahip olmak benim için uygun görünüyor ve elde etmek istediklerimi sadece değerler döndürerek nasıl başarabildiğimi gerçekten göremiyorum. Ayrıca, çoğu zaman (sanırım bu korkunç) Her ikisini de yapan yöntemlerim var.
Ancak, bu 133 upvotes, şu anda saf fonksiyonel programlamanın "kazanmak" olduğunu düşünüyorum, çünkü anlatmak daha üstün bir fikir birliği haline gelir, sormayın. Bu doğru mu?
Bu nedenle, bu antipattern-basmış oyun örneği üzerinde yapmaya çalışıyorum : Eğer saf fonksiyonel paradigmaya uygun hale getirmek istersem - NASIL ?!
Bir savaş devletine sahip olmak benim için makul görünüyor. Bu sıra tabanlı bir oyun olduğu için savaş durumlarını sözlükte tutuyorum (çok oyunculu - aynı anda birçok oyuncu tarafından oynanan birçok savaş olabilir). Bir oyuncu ne zaman dönerse, (a) durumu buna göre değiştiren ve (b) JSON'a serileştirilen ve temel olarak sadece yazı tahtası. Sanırım bu, hem HEM prensiplerinin hem de aynı zamanda çirkin bir ihlalidir.
Tamam - gerçekten isteseydim, yerinde bir değişiklik yapmak yerine bir savaş devletini İADE yapabilirim. Fakat! O zaman savaş durumundaki her şeyi, yerine değiştirmek yerine tamamen yeni bir durumu geri döndürmek için gereksiz yere kopyalamak zorunda kalacak mıyım?
Belki de hamle bir saldırı ise, güncellenmiş HP karakterleri iade edebilir miyim? Sorun şu ki, bu kadar basit değil: oyun kuralları, bir hamle, oyuncunun HP'sinin bir kısmını kaldırmaktan çok daha fazla etkiye sahip olabilir ve genellikle daha fazla etkiye sahip olacaktır. Örneğin, karakterler arasındaki mesafeyi artırabilir, özel efektler vb. Uygulayabilir.
Durumu yerinde değiştirip güncellemeleri iade etmem çok daha basit görünüyor ...
Ancak deneyimli bir mühendis bununla nasıl başa çıkabilir?