Bir enerji santrali portföyü için ulusal enerji üretim programını bir enerji şirketi için bir ticaret pozisyonuna dengelemek için bir uygulama yazdım. Istemci ve sunucu bileşenleri C # vardı ama hesaplama motoru F # yazılmıştır.
Bu uygulamanın kalbindeki karmaşıklığı gidermek için F # kullanımı, kurumsal yazılım içindeki dil için tatlı bir nokta, yani büyük veri kümelerinin algoritmik olarak karmaşık analizi açıkça göstermektedir. Deneyimlerim çok olumlu oldu. Özellikle:
Ölçü birimleri Çalıştığım endüstri birimlerle doludur. Uyguladığım denklemler (genellikle geometrik nitelikte) zaman, güç ve enerji birimleriyle ilgiliydi. Tip sisteminin, fonksiyonların giriş ve çıkış birimlerinin doğruluğunu doğrulaması, hem test etme hem de kodu okuma / anlama açısından büyük bir zaman tasarrufu sağlar. Önceki sistemlerin eğilimli olduğu bütün bir hata sınıfını ortadan kaldırır.
Keşifsel programlama Betik dosyalarıyla ve REPL (F # Interactive) ile çalışmak, bir uygulamaya başlamadan önce, daha geleneksel düzenleme / derleme / çalıştırma / test döngüsüne göre çözüm alanını daha etkili bir şekilde keşfetmeme izin verdi. Bir programcının problem ve oyundaki tasarım gerilimleri hakkındaki anlayışlarını geliştirmesi çok doğal bir yoldur.
Birim testi Yan etkisi olmayan fonksiyonlar ve değiştirilemez veri yapıları kullanılarak yazılan kodlar test etmek keyiflidir. İşleri bertaraf etmek için karmaşık zamana bağlı etkileşimler ya da alay edilecek büyük bağımlılık grupları yoktur.
Birlikte çalışma C # 'da hesaplama motorunun arayüzünü tanımladım ve F #' da hesaplamayı uyguladım. Daha sonra hesaplama motoru, birlikte çalışabilirlikle ilgili herhangi bir endişe duymadan kullanması gereken herhangi bir C # modülüne enjekte edilebilir. Sorunsuz. C # programcısı asla bilmenize gerek yok.
Kod azaltma Hesaplama motoruna beslenen verilerin çoğu vektörler ve matrisler şeklindeydi. Daha üst düzey fonksiyonlar, bunları minimum yaygara, minimum kod ile kahvaltıda yerler. Güzel.
Hataların olmaması Fonksiyonel programlama garip gelebilir. Ben bir tür denetleyicisi geçmek kod çalışmasını geçmek için çalışıyoruz çalışıyoruz ama tip denetleyicisi thats memnun kez, o çalışır. Neredeyse ikili, derlenmeyecek ya da doğru olacak. Tuhaf kenar durumu hataları en aza indirilir, özyineleme ve daha yüksek dereceli işlevler, kenar durumu hatalarını tanıtan birçok kitap tutma kodunu kaldırır.
Paralellik Sonuçta ortaya çıkan uygulamanın fonksiyonel saflığı, veri vektörlerinin işlenmesinde içsel paralellikten faydalanmak için olgunlaştırır. Belki de şimdi .NET 4 dışarı şimdi gideceğim yerdir.