Saya telah membaca berkali-kali di web bahwa jika bahasa Anda tidak mendukung beberapa konsep, misalnya, orientasi objek, atau mungkin panggilan fungsi, dan itu dianggap praktik yang baik dalam konteks lain ini, Anda harus melakukannya.
Satu-satunya masalah yang dapat saya lihat sekarang adalah bahwa programmer lain mungkin menemukan kode Anda terlalu berbeda dari biasanya, sehingga menyulitkan mereka untuk memprogram. Apa masalah lain yang menurut Anda mungkin timbul dari ini?
programming-languages
concepts
idioms
Julio Rodrigues
sumber
sumber
Jawaban:
Salah satu masalah adalah bahwa Anda mungkin menemukan diri Anda menulis banyak kode untuk mengekspresikan sesuatu dengan cara yang akan Anda lakukan dalam bahasa lain, sementara ada cara yang lebih mudah dalam bahasa yang Anda gunakan.
Misalnya, dalam jawaban tentang Stack Overflow , saya telah menjelaskan bagaimana kontrak kode, konsep yang digunakan dalam .NET Framework, dapat sebagian ditiru dalam PHP yang tidak mendukungnya. Saya akhirnya menulis banyak kode tanpa biaya, karena hal yang sama dapat dilakukan dengan array sederhana.
Secara umum, setiap bahasa memiliki budaya sendiri, praktik terbaiknya sendiri, gayanya sendiri.
Jika saya mulai menulis kode C # seperti itu C, itu akan jelek.
Jika saya menangkap Haskell sebagai pengembang Java yang terpaksa menggunakan Haskell, tetapi tidak ingin memahami kekuatannya dan hanya ingin mengkloning konsep Java, kode yang saya tulis akan menderita.
dll.
Tidak ada salahnya mencoba meningkatkan bahasa (misalnya meningkatkan C # dengan memperkenalkan satuan ukuran seperti dalam F #), tetapi jika Anda melakukannya terlalu banyak, Anda mungkin harus memilih bahasa yang berbeda yang benar-benar sesuai dengan kebutuhan Anda.
sumber
DropKurangnya keterbacaan cukup menjadi masalah tersendiri: penurunan drastis orang yang berpotensi mempertahankan proyek Anda tanpa pelatihan ekstensif dari Anda.
Tambahan,
sumber
Itu bukan ide yang baik seperti yang terlihat di atas kertas.
Contoh 1: Jika Anda sudah cukup tua, Anda mungkin ingat hari-hari ketika C adalah anak baru di kota. Pemrogram Pascal dan Ada tidak suka kurung kurawal buka dan tutup. Mereka #defined
begin
danend
untuk membuka brace dan menutup brace, dan voila! CAda! Hasil yang disayangkan buruk dari perspektif Baik atau C.Contoh 2, pribadi: Salah satu hal yang sangat saya sukai dari Common Lisp Object System adalah sebelum, sesudah, dan sekitar metode. Mereka bisa sangat berguna di banyak tempat. Jadi saya meniru konsep ini dalam C ++ di beberapa tempat tertentu. Satu-satunya cara untuk meniru konstruksi ini di C ++ adalah dengan mengharuskan pengembang kelas turunan untuk memanggil metode kelas induk dengan nama yang sama di tempat yang tepat dalam kode. Ini menempatkan persyaratan pada pengembang yang berasal dari kelas saya yang agak asing untuk pemrograman C ++, dan mungkin bertentangan dengan pemrograman C ++. Tidak peduli seberapa baik didokumentasikan persyaratan ini, orang hanya tidak mengikuti pedoman karena tidak cukup sesuai dengan paradigma C ++.
sumber
Abstraksi bocor.
sumber
out
parameter dalam kerangka kerja yang tidak benar-benar mendukungnya; C # mengasumsikan bahwa setiap fungsi akan selalu menulis ke semuaout
parameternya, tetapi metode non-C # yang dipanggil oleh metode C # tidak menawarkan jaminan seperti itu.Ini bisa sangat sulit. Bayangkan mencoba mengimplementasikan LINQ dari C # ke dalam aplikasi Java Anda. Atau bagaimana kalau hanya menambahkan penutupan leksikal ke suatu bahasa? Anda cukup banyak harus menulis kompiler baru, yang cukup banyak memberi Anda bahasa baru.
Atau, untuk kasus-kasus di mana Anda tidak harus mengimplementasikan bahasa Anda sendiri, bayangkan saja mencoba menerapkan metode pengumpulan menggunakan fungsi tingkat tinggi (seperti peta) dalam bahasa yang tidak memiliki blok kode atau fungsi lambda atau penutupan atau fungsi sebagai yang pertama benda-benda kelas. Setiap fungsi urutan yang lebih tinggi harus dinyatakan sebagai antarmuka dan diimplementasikan secara eksplisit, dan semua negara yang akan ditangkap dalam penutupan harus secara eksplisit disimpan di kelas implementasi. Mengetik terlalu banyak, dan jauh lebih sulit untuk dibaca, sehingga seringkali tidak sepadan.
sumber