İşlevsel bir programlama dili almalı mıyım?


10

Son zamanlarda kodumu yazma yolu hakkında daha fazla endişe duydum. Tasarım kalıpları hakkında birkaç kitap okuduktan sonra (ve bunların çok fazla uygulanması, eminim) düşüncemi değişen olanı kapsüllemeye doğru kaydırdım. Daha az arayüz ve daha metod odaklı kod yazdığımı fark ettim, burada yaşamı tahminler, eylemler ve diğer delege görevleri ile eski sınıflara ladin yapmayı seviyorum. Genellikle değişen eylemlerin bu olduğunu düşünüyorum, bu yüzden bunları kapsarım. Sık sık, her zaman olmasa da, arayüzleri tek bir yönteme ayırıyorum ve sonra yeni bir sınıf oluşturmaya istemci kodunu zorlamak yerine görev için bir temsilci kullanmayı tercih ediyorum.

Yani sanırım bana vurdu. Bunun yerine fonksiyonel programlama yapmalı mıyım?
Düzenleme: İşlevsel programlama hakkında bir yanlış anlama olabilir.

Şu anda tercih ettiğim dil C # ve C ++ arka planından geliyorum. Oyun geliştiricisi olarak çalışıyorum ancak şu anda işsizim.

Mimariye karşı büyük bir tutkum var. Benim erdemlerim temiz, esnek, tekrar kullanılabilir ve bakımı kolay kodlardır. Bu yollarla zehirlenip zehirlenmediğimi veya daha iyisi olup olmadığını bilmiyorum. Yeniden ateşleyen bir ateşim var mı yoksa devam etmeli miyim? Bunun "iş için doğru aracı kullan" ile ilgili bir soru olabileceğini anlıyorum , ancak düşüncelerinizi duymak isterim.

İşlevsel bir dil almalı mıyım? Korku faktörlerimden biri Visual Studio'nun rahatlığını bırakmak.


Visual Studio'dan ayrılmak bir anlaşma kırıcıysa F # 'yı deneyebilirsiniz.
Adam Lear

Bu bir anlaşma kırıcı değil. Başka pek çok alternatif denemedim. Sanırım zekâ, yeniden düzenleme veya benzeri araçlar olmadan çalışmaya karşı biraz korku duydum ve sonunda tekrar düz bir metin düzenleyicide kod yazmanız gerektiği fikrine sahibim.
Bildirimi

Şu anda işsizim ... düzeltilecek ilk şey bu olmamalı mı?
Meslek

Bir süre VS olmadan çalışmayı denerdim. Çok minimalist bir şekilde çalışmanın eğlenceli olabileceğini görebilirsiniz.
Zachary K

@ İş, evet, ama son zamanlarda oldukça kötü bir dizi olayla karşılaştım :) Ayağımı (iyi, ayağımla kodlamıyorum, ama yine de ...) yeni bir tane ara.
Bildirimi

Yanıtlar:


5

EVET

Yeni şeyler öğrenmek eğlenceli olmalı. Ve programlamanın yeni bir yolunu öğrenmek sizi daha iyi bir programcı yapmalıdır. Haskell veya Erlang'dan birini kontrol edin, her ikisi de işlevsel ancak çok farklı. Haskell'i seçerseniz, youtube veya podcast'lerde "Simon Payton Jones" dan birkaç konuşma yapın. Adam harika bir konuşmacı.


1
Bu cevabı birçok nedenden dolayı seçtim. @Zachary K, iyi bilinen bir yerin kutusundan çıkmanın ve başka bir bakış açısına sahip olmanın eğlenceli olabileceğini söylüyor. Ben korkmamalı yeni bir şey denemek için. Günlerin sonu değil. Haskell, daha önce birkaç kez çeşitli tartışmalarda dikkatimi çeken bir dildir. İşlevsel bir dile ihtiyacım olup olmadığını bilmiyorum ama @Toby Allen'ın dediği gibi, diğer yolların nasıl çalıştığını görmenin harika bir yolu ve bazı UnrealScript'i denedikten sonra buna katılıyorum. @ammoQ biraz puan kaçırdı ama sorumun iyi bir tanımı yoktu. Hala endişelerini anlıyorum.
Bildirimi

Yardımcı olduğuma sevindim. İyi eğlenceler
Zachary K

14

Kutsal * * * *. Gümüş mermi yok. İnmek. Rahatlayın, derin bir nefes alın.

Araç kutunuzda bir aracınız olması, onu kullanmak zorunda olduğunuz anlamına gelmez. Eldeki göreve konsantre olun, yani çalışan bir program yazmak ve kod kötü kokuyorsa refactor. Gelecekte bir gün değişebileceği için her küçük ayrıntıyı özetlemeyin ve özetlemeyin. IMO, doğrudan başlamak için çok daha iyi, KISS & YAGNI ve gerçekten değiştiklerinde değişen gereksinimlere tepki veriyor .

Burada kimsenin size işlevsel bir dilin ihtiyaçlarınıza daha uygun olup olmadığını söyleyebileceğini sanmıyorum. Çünkü bize ne üzerinde çalıştığınızı söylemediniz.


Şu anda özellikle hiçbir şey üzerinde çalışmıyorum. İşler arasındayım. Ben bir oyun geliştiricisiyim.
Bildirimi

3
Bu, aşırı mühendislikle ilgili tehlikeli bir durumdur. Son tarih yok, birikim yok, ayrıntılara takıntılı olmak için çok fazla zaman.
user281377 12:11

(Aklımda net bir resim olmadığı için bir sürü tahmin var) Sanırım "ihtiyaçlarım" kod yazmayı tercih ettiğim şekilde daha fazla yansıtıldı . Fonksiyonel programlama hakkında pek bir şey bilmiyorum ve sanırım bu isim beni biraz kandırdı. Sadece tercihimin düşündüğüm kadar nesne yönelimli olmadığını hissediyorum. Belki başka bir paradigmada çalışmaktan zevk almalıyım ?
Bildirimi

Evet, sanırım durum böyle. Şu anda öğrenme aşamasındayım, bu yüzden yazma olanaklarını belirli şekillerde araştırıyorum. İş yerinde, genellikle böyle bir kod yazmak için zaman yoktu ve davranış kurallarına saygı göstermeli ve geliştiriciler arasında tutarlı bir stil sürdürmelisiniz.
Bildirimi

2
Elinizdeki her aleti denediğinizde, işler arasında olduğunuzda kesinlikle sorun değil, ama korkarım ayakkabının uygun olup olmadığını söyleyemeyiz.
user281377 12:11

12

F # alabilirsiniz . Visual Studio'yu kullanmanıza ve .NET bilginizin çoğunu yeniden kullanmanıza izin veren .NET işlevsel dilidir. Tabii ki meclisleri C # derlemeleriyle sorunsuz bir şekilde bütünleşir (C #, C ++ / CLI ve F # bir projede kolayca birleştirmenize izin verir). F # desteği VS Pro veya daha iyisi ile birlikte gelir, ancak varsayılan olarak etkin olup olmadığından emin değilim.


Ben VS2008 F # için bir addon olduğunu düşünüyorum, ama VS2010 varsayılan.
apoorv020

F #, ücretsiz bir VS Shell ile bile çalışır.
SK-mantık

6

IMO, işlevsel bir dil denemeye değer. Hiçbir zaman doğrudan piyasaya sürülen bir üründe kullanmasanız bile, onu öğrenmek neredeyse kesinlikle programlamaya biraz farklı bir görünüm / bakış açısı kazandırmaya yardımcı olacaktır. Tüm "gerçek" kodlamalarınızı C # 'da yapmaya devam etseniz bile, C #' da yazdığınız kodu geliştirmenize yardımcı olma şansı oldukça düşüktür.

Diğerlerinin de belirttiği gibi, Visual Studio'ya alışkın olan biri için bariz seçim, temelde bir Ocaml / Caml / ML türevi olan F #'dır. IMO, Microsoft'un insanları işlevsel programlamaya tanıtmak için iyi bir seçimdi - tam teşekküllü bir işlevsel dil, ancak bazılarının yaptığı kadar neredeyse yabancı bir sözdizimi yok (ör. Lisp tabanlı diller gerçek avantajları var, yeni başlayanlar neredeyse her zaman okumayı zor buluyor).


2

Evet yapmalısın.

Haskell gibi saf bir dil seçerseniz, sadece yeni bir dil değil, yeni bir düşünce şekli de öğreneceksiniz. Bu proceural / OO çalışmanızda size yardımcı olabilir.

Öte yandan F #, saf değildir ve böylece fonksiyonel programlamada önemli olanı kolayca özleyebilirsiniz. Yóu, tabiri caizse, burada bir değişkeni değiştiren prosedür programları yazmaya devam edebilir, sadece F # sözdiziminde bazı yan etkiler gerçekleştirebilir.


Aslında tryhaskell.org'da başladım :) Yeni şeyler öğrenmek heyecan verici.
Bildirimi

1

Zaten c # kullanıyorsanız, yeni bir dile ihtiyacınız yoktur - uzatma yöntemleri, lambdas ve genel Func / Action türlerinin birleşimi ile C # 'da fonksiyonel kod yazmak oldukça kolaydır - bu şekilde tüm uygulamayı değiştirmeye gerek kalmadan en mantıklı olduğu algoritmalar.


1
Her zaman başka bir dile ihtiyacınız vardır. Hiç kullanmasanız bile, yeni bir dil öğrenmek harika bir öğrenme deneyimidir. Kimse her şeye sahip değildir.
Toby Allen

Her zaman öğrenmeniz gerekir, ancak her zaman başka bir dil öğrenmeniz gerekmez. Yarar, dilin kendisinden ziyade fonksiyonel programlama kavramlarını öğrenmekten gelir ve bunu tanıdık ortamdan ayrılmadan ve tüm projeyi değiştirmeden yapabilirsiniz. C # yeterince iyidir ve pratik olarak, sadece gerçekten yararlanan algoritmalarda fonksiyonel koda sahip olmanın büyük bir avantajı vardır.
Tom Clarkson

Evet, sanırım bu oyun oynarken kendimi sıklıkla çalışırken bulduğum yöntemlerle / işlevlerle çalışmak için daha uygun diller (sözdizimsel olarak) varsa, endişem daha fazla önyargılıydı. C # teklif lambda ifadeleri ve bu kendi içinde güzel ama örneğin bir işleve sahip herhangi bir parametre olmadan bir değer döndürmek kodu () => x gibi verir ve belki de daha temiz yollar vardır.
Bildirimi

+1 @Toby. Kısa bir süre önce UnrealScript referansıyla gözden geçirdim ve States et.c. ile çalışmak için bazı ilginç dil çözümleri gördüm. Sorun hakkında düşünme açısından C # 'a taşır ve oldukça güzel bir çözüme sahiptirler. Yani evet, sandbox'ınızdan çıkıp bulduğunuz tüm kum ve oyuncak için komşularınızı yağmaladığınızda çok şey öğrendiğinize inanıyorum :)
Açıklama
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.