Şirket için oldukça önemli olabilecek bir araç için Etki Alanına Özel Bir Dilin uygulanması görevi verildi. Dil basit ama önemsiz değil, zaten iç içe döngülere, dizi birleştirmeye vb. İzin veriyor ve proje ilerledikçe diğer yapıların ekleneceğinden de kesin olarak emin.
Tecrübeyle, bir dilbilgisi / çözümleyici yazmanın, dilbilgisi önemsiz olmasa da elle zaman alıcı ve hataya açık bir süreç olduğunu biliyorum. Bu yüzden iki seçeneğim kalmıştı: bir ayrıştırma jeneratörü veya bir Parcec gibi bir birleştirme kütüphanesi. Birincisi de iyiydi ama ikincisini çeşitli nedenlerden dolayı seçtim ve çözümü işlevsel bir dilde uyguladım.
Sonuç gözlerim için oldukça muhteşem, kod çok özlü, zarif ve okunabilir / akıcı. Java / c # dışında başka bir programda programlanmadıysanız biraz garip gelebileceğini kabul ediyorum, ancak bu durumda java / c # ile yazılmış olmayan herhangi bir şey geçerli olacaktır.
Ancak bir noktada, tam anlamıyla bir iş arkadaşı tarafından saldırıya uğradım. Ekranıma kısa bir bakıştan sonra, kodun anlaşılmaz olduğunu ve ayrıştırmayı yeniden icat etmemem gerektiğini, herkes gibi bir yığın ve String.Split kullanacağımı açıkladı. Çok fazla gürültü yaptı ve onu kısmen ikna edemediğim için, kısmen şaşırttım ve açık bir açıklama yapmadığım için, kısmen fikri kabul edilemediği için (cezalandırılmadı). Ona dili açıklamayı bile teklif ettim, ama boşuna.
Tartışma yönetimin önünde yeniden yüzeye çıkacağından eminim, bu yüzden bazı sağlam argümanlar hazırlıyorum.
Bunlar String.Split tabanlı bir çözümden kaçınmak için aklıma gelen ilk birkaç neden:
- Özel durumları ele almak için çok fazla ife ihtiyacınız var ve işler hızla kontrolden çıktı
- çok sayıda kodlanmış dizi indeks bakımı acı verir
- işlev çağrısı gibi şeyleri yöntem argümanı olarak ele almak son derece zor (ör. add ((add a, b), c)
- sözdizimi hataları durumunda anlamlı hata mesajları sağlamak çok zor (gerçekleşmesi çok muhtemel)
- Ben basitlik, açıklık ve gereksiz akıllı-kriptik şeylerden kaçınmak için her şeyim, ama aynı zamanda bir burger flipperının bile anlayabilmesi için kod tabanının her bölümünü aşağılamamasının bir hata olduğuna inanıyorum. Arayüzleri kullanmadığım, kaygıların ayrılmasını benimsemediğim, etrafa kopya-yapıştırma kodu koymama, vb. Duyduğum aynı argüman. Sonuçta bir yazılım projesi üzerinde çalışmak için en az teknik yeterlilik ve öğrenmeye istekli olmak gerekiyor. (Bu tartışmayı muhtemelen rahatsız edici geleceği için kullanmayacağım ve bir savaş başlatmak hiç kimseye yardımcı olmayacak)
Cthulhu yolunu ayrıştırmaya karşı en sevdiğiniz argümanlar nelerdir ? *
* tabii ki beni haklı olduğuna ikna edersen, ben de tamamen mutlu olacağım