Saat mempelajari bahasa pemrograman baru, Anda terkadang menemukan fitur bahasa yang membuat Anda berharap memilikinya dalam bahasa pemrograman lain yang Anda kenal.
Apa saja fitur bahasa yang pada saat belajar sangat baru bagi Anda dan yang Anda inginkan dimiliki oleh bahasa pemrograman lain.
Contohnya adalah generator dengan Python atau C #. Contoh lain mungkin termasuk daftar pemahaman dalam Python, templat di C ++ atau LINQ di .NET atau evaluasi malas di Haskell.
Fitur bahasa semi-unik apa lagi yang Anda temui yang benar-benar baru dan mencerahkan bagi Anda? Apakah ada fitur lain dari bahasa pemrograman lama yang unik dan tidak lagi populer?
sumber
Makro macet.
Bahasa makro Lisp adalah Lisp, dengan beberapa fitur sintaks yang telah ditentukan demi kenyamanan. Dengan menggunakannya, dimungkinkan untuk menambahkan fitur-fitur utama pada bahasa, seperti pilihan gaya orientasi objek seseorang atau pencocokan deterministik seperti Prolog, tanpa melihat keluar dari tempatnya. Itu membuat
setf
makro mungkin, yang merupakan makro konseptual sangat kuat:(setf A B)
berarti bahwa, ketika Anda mengevaluasiA
Anda akan mendapatkanB
, dan itu dapat diperluas ke batas apa pun yang Anda suka.Metaprogramming template C ++ mampu melakukan hal yang serupa, tetapi dalam bahasa yang jauh berbeda dari C ++ biasa.
sumber
Dekorator Python.
Sangat mudah untuk menerapkan memoisasi atau penentuan waktu fungsi menggunakan dekorator.
Contoh timer fungsi.
Sekarang jika Anda memiliki fungsi untuk waktu, Anda dapat melakukan ini,
Anda akan melihat sesuatu seperti,
Fungsi 'foo' butuh waktu 3 detik.
sumber
Casting ke
void*
dalam C. Anda dapat melakukan segalanya untuk byte mentah, dan melakukan apa pun yang Anda inginkan dengan data ini.(Ya, saat ini unik ...)
sumber
void*
...Pointer
dalam Pascal dan Object Pascal melakukan hal yang sama.int64_t
tidak dapat Anda gunakan dengan amanvoid *
(Maaf untuk terlambat - 2 tahun - balas).Menghasilkan dalam Python
Dalam Python (dan saya percaya pada C #), Anda dapat menentukan generator yang disebut yang menghentikan eksekusi fungsi pada sebuah
yield
pernyataan, mengembalikan nilai dan pada panggilan berikutnya, me-restart fungsi yang ditinggalkannya (dengan status dipertahankan di antara panggilan). Ini bagus untuk menghasilkan daftar nilai yang panjang di mana Anda hanya tertarik pada nilai fungsi saat ini (yang sangat umum). Hal ini memungkinkan Anda untuk membangun urutan yang berpotensi panjang tanpa batas sementara hanya menempati ruang yang sangat terbatas dalam memori.sumber
Ekspresi Lambda (penutupan, fungsi bersarang, metode anonim, apa pun namanya).
Saya pertama kali menemukan mereka di Perl, langsung menyukai mereka dan bertanya-tanya mengapa bahasa lain tidak memilikinya. Saat ini saya rasa itu tidak unik lagi; bahkan PHP telah berhasil meretasnya. Tetapi mereka semi-unik pada saat itu.
sumber
Lanjutan dari Skema (kemudian diadopsi oleh beberapa bahasa lain termasuk Ruby.)
sumber
Set di Delphi sangat berguna, cukup banyak array bernama boolean. Mereka sangat berguna untuk menyimpan formulir pengaturan dengan 32 kotak centang. Tetapi mereka memiliki semua fungsi teori himpunan yang sama (yaitu perbedaan, persimpangan, persatuan).
Saya tidak yakin apakah mereka sudah ketinggalan zaman, tapi saya menggunakannya sepanjang waktu.
sumber
Kirim
Dari Erlang. Mengirim pesan asinkron ke utas lainnya.
Menerima
Dari Erlang. Menerima pesan dari utas lainnya.
sumber
C # Properties
vs.
(Jawa)
sumber
Serikat pekerja di C
Jujur saya tidak bisa mengatakan bahwa saya belum cukup menulis C untuk membuat ini sendiri tetapi saya telah bekerja dengan kode lain yang melakukannya.
Ketika datang ke kemasan campuran data yang berbeda dalam aplikasi yang memanipulasi bit / byte mentah seperti jaringan atau penyimpanan data biner. Dalam bahasa yang sangat diketikkan, tidak ada cara mudah untuk melakukan yang setara.
Penolakan:
Meskipun Serikat pekerja sangat berguna dalam beberapa kasus, mereka tidak ditemukan dalam bahasa tingkat paling tinggi karena mereka tidak mengetik aman. Yaitu, Anda dapat membuat data berdarah lintas batas variabel menggunakan serikat (besar tidak, tidak di dunia tipe aman). Dengan kekuatan besar datang tanggung jawab besar.
sumber
union
penggunaannya aman, beberapa idiom yang didukung dengan baik (meskipun secara teknis tidak benar) - lihat cellperformance.beyond3d.com/articles/2006/06/… (meskipun lebih poblem dengan pointer serikat juga bisa memalsukannya).record
sintaksinya untuk mendukung serikat pekerja:in_addr = record case integer of 0: (S_un_b: SunB); 1: (S_un_w: SunW); 2: (S_addr: u_long); end;
Saya sangat suka pengubah kecuali di Ruby . Tampaknya sangat alami dan menggantikan banyak skenario di mana kode Anda tampaknya sangat berantakan tanpanya.
Bagaimana kamu tidak bisa seperti itu? : D
sumber
unless
danwhen
yang menggantikan skenario percabangan paling umum yang biasanya digunakanif/else
.sintaks argumen python mewah
Saya tidak yakin seberapa unik ini, tetapi dengan python Anda dapat melakukan hal-hal keren seperti memasang pasangan kata kunci secara otomatis ke dalam kamus dan kembali. Sama dengan daftar:
python docs (gulir ke bawah untuk lebih banyak hal pasing argumen)
sumber
Preprosesor C. Anda bahkan dapat menulis kode umum ke platform yang berbeda dengan - ifdefs lebih sedikit atau lebih.
sumber
Kategori Objective-C
Kategori menawarkan cara mudah untuk memperluas fungsionalitas objek saat runtime (pikirkan komposisi versus pewarisan). Contoh klasik adalah menambahkan pemeriksa ejaan ke kelas NSString.
Juga berguna untuk perbaikan bug berdampak rendah, karena implementasi metode pada suatu kategori akan menimpa implementasi orang tuanya.
sumber
Ruby 's inject metode dikombinasikan dengan # to_proc Simbol fitur Ruby 1.9 memungkinkan satu menulis beberapa sangat ringkas (tetapi masih dapat dibaca) kode:
misalnya
(1..10).inject(:+)
yang menjumlahkan bilangan bulat 1 hingga 10 => 55
Melihat contoh-contoh seperti ini membuat saya ingin belajar Ruby, yang baru saja saya mulai lakukan.
sumber
Mekanisme Binding di JavaFX (RIP). Kata kunci mengikat memungkinkan Anda untuk mengikat nilai variabel ke nilai ekspresi dan membuat Anda menyingkirkan semua Listener jelek apa pun kode boilerplate.
Meskipun JavaFX cukup gagal dalam banyak hal, saya menemukan banyak fitur bahasa scripting yang cukup bagus.
sumber
Mixin string plus evaluasi fungsi waktu kompilasi dalam D adalah fitur pembunuh yang cukup unik. Ya, secara teknis ini dua fitur, tetapi kekuatan sebenarnya berasal dari menggabungkannya. Dengan kombinasi ini, Anda dapat menulis fungsi D biasa yang menghasilkan kode sebagai string pada waktu kompilasi, dan kemudian mencampur kode ini ke dalam ruang lingkup apa pun dan membuatnya dievaluasi sebagai kode D biasa. Kode dikompilasi sepenuhnya secara statis dan dieksekusi persis seolah-olah telah ditulis tangan. Fitur ini bahkan digunakan untuk mengatasi beberapa situasi yang sulit di perpustakaan standar.
sumber