Jika Anda menggunakan C # dan F # bersama-sama

16

Saya tahu Anda dapat menggunakan C # dan F # bersama dalam proyek yang sama namun saya tidak yakin apakah itu ide yang baik untuk melakukannya.

Sepertinya saya bahwa mencampur dua gaya pengkodean yang sangat berbeda (fungsional vs OOP) dapat menyebabkan kurangnya kohesi dalam desain. Apakah ini benar?

Tom Squires
sumber
1
Bagaimana Anda bisa menggunakannya dalam proyek yang sama? Apakah maksud Anda solusi yang sama?
Bryan Boettcher
2
Bukan Microsoft Definisi proyek tetapi definisi yang lebih umum
Tom Squires
Satu kelemahan yang jelas adalah bahwa jika setidaknya sebagian dari pekerjaan pada proyek mensyaratkan bahwa pengembang berinteraksi dengan kedua bagian dalam C # dan dalam F # (bahkan hanya untuk membacanya), bagian-bagian itu akan membutuhkan pengembang yang memiliki pengetahuan dalam kedua bahasa, dan ada kurang dari mereka yang berpengetahuan hanya dalam satu bahasa, dan dengan demikian mereka lebih sulit ditemukan, berpotensi lebih mahal dan ada lebih sedikit variasi mereka (dalam kasus khusus ini meskipun kemungkinan bahwa sebagian besar pengembang F # setidaknya memiliki sedikit keakraban dengan C # juga) .
gbr
benar. misalnya, secara bertahap memasukkan F # ke solusi C # yang lama merupakan skenario yang valid.
KolA

Jawaban:

23

Tidak ada yang salah dengan mencampur bahasa dalam suatu produk selama Anda menggunakannya dengan benar dan mereka "bermain baik" bersama-sama.

Jika ada bagian dari proyek Anda yang sebaiknya dikodekan menggunakan bahasa fungsional maka masuk akal untuk mengkodekannya dalam F #. Demikian pula untuk C #.

Apa yang tidak ada gunanya (paling-paling) adalah mencampur bahasa untuk kepentingan itu.

ChrisF
sumber
0

Sepertinya saya bahwa mencampur dua gaya pengkodean yang sangat berbeda (fungsional vs OO) dapat menyebabkan kurangnya kohesi dalam desain. Apakah itu benar?

Saya tidak berpikir Anda akan mendapatkan "kurangnya kohesi". Setiap bahasa memiliki kelebihan dan kekurangan. Menggabungkan mereka pada run-time bahasa umum memungkinkan Anda lebih dekat dengan yang terbaik dari kedua dunia. Dengan C # dan F #, Anda hanya ingin memastikan Anda menggunakan persimpangan dua bahasa di antarmuka antara keduanya dalam solusi Anda.

Jon Harrop
sumber
0

Ya saya setuju dengan ChrisF . Juga C # saat ini sudah memasukkan prinsip-prinsip F #, seperti jenis anonim:

var unitanon = new[]
{
    new { Field1="new car", Field2 = 1},
    new { Field1="old car", Field2 = 20} 
};

Yang mengatakan, saya pribadi berpikir itu adalah langkah mundur dalam keterbacaan kode, meskipun sangat nyaman.

PaulDecember
sumber
2
Jenis anonim sebenarnya bukan prinsip F #. Mungkin Anda bermaksud merujuk pada inferensi tipe (apa kata kunci var dalam C #) di mana kompiler menebak tipe apa yang Anda maksud. Ini digunakan di seluruh F #.
Mongus Pong
1
Saya akan menggunakan F # untuk kapabilitas async yang mudah. Namun, TPL membuatnya cukup mudah untuk melakukannya di C # dengan sendirinya. Jika Anda menanamkan bahasa untuk skrip, saya pasti akan menggunakan F # untuk menguraikan itu.
Jetti