Saya memahami "idiom" sebagai operasi atau pola umum yang dalam bahasa tertentu tidak disederhanakan oleh sintaksis bahasa inti, seperti kenaikan bilangan bulat:
i = i + 1;
Dalam C ++, idiom ini disederhanakan oleh operator:
++i;
Namun, ketika seseorang menggunakan istilah "idiomatik", saya tidak yakin bagaimana memahaminya. Apa yang membuat sepotong kode "idiomatik"?
Jawaban:
Cara idiomatis menulis beberapa kode adalah ketika Anda menulisnya dengan cara yang sangat spesifik karena idiom spesifik bahasa yang tidak dimiliki bahasa lain.
Misalnya, dalam C ++, mengeksploitasi idiom RAII mengarah ke cara penulisan sumber pengelolaan kode C ++ yang idiomatis.
Contoh lain akan menggunakan daftar pemahaman dalam Python untuk menghasilkan daftar. Itu idiomatik karena Anda akan menggunakan pemahaman daftar dalam Python idiomatik tetapi Anda bisa melakukan hal yang sama menggunakan fungsi generator dalam bahasa lain atau bahkan dalam Python.
Seringkali, seseorang mencoba bahasa baru tanpa menggunakan idiom khusus untuk bahasa ini tidak akan menulis kode idiomatik.
sumber
TryAdd()
padaDictionary
kelas Generic untuk pertama kali memeriksa!Contains()
dan kemudian memanggilAdd()
, ini akan menjadi idiomatik? Saya menggunakan fitur khusus untuk metode ekstensi # C.Definisi Normal
Definisi Pemrograman
sumber
Idiomatik dalam konteks pemrograman biasanya dapat didefinisikan sebagai "cara paling alami untuk mengekspresikan sesuatu dalam suatu bahasa"
Saya melihat kata idiomatis muncul sangat banyak di Ruby. Di Ruby, ada banyak kemampuan pemrograman meta, dan untuk menulis kode Ruby idiomatis, Anda biasanya harus menggunakannya.
Perhatikan bahwa hanya karena sepotong kode idiomatis, tidak berarti kode itu bersih atau bahkan ringkas. Sering kali Anda harus berkompromi.
Jadi pada dasarnya, idiomatik paling umum merujuk pada cara paling umum untuk menulis sesuatu dalam bahasa, sering kali termasuk "gaul" (idiom). Jika sepotong kode tidak idiomatis, mungkin dapat dibaca dengan sempurna, ringkas, bersih, dan benar, tetapi mungkin terasa / terlihat canggung dalam bahasa yang digunakan. Ini adalah preferensi selera, apakah menulis ulang kode seperti itu secara idiomatis akan menjadi hal yang baik dan harus dinilai berdasarkan kasus per kasus
Bahasa Inggris idiomatik misalnya dapat bergantung pada wilayah. Menggunakan kata
bum
mungkin diperlukan untuk bahasa Inggris UK idiomatik, sementarabutt
itu lebih tepat untuk bahasa Inggris AS. (Saya tidak tahu banyak bahasa Inggris Inggris sedih: /)sumber
Contoh terbaik yang bisa saya rancang, dari atas kepala saya, untuk sesuatu yang idiomatis, berasal dari Ruby.
Dalam banyak bahasa, Anda dapat beralih dengan:
Atau sesuatu yang sangat mirip. Banyak bahasa juga memiliki
foreach(x in SetOfXes)
konstruk. Tapi iterasi yang idiomatis untuk Ruby mencakup hal-hal seperti:dan bahkan
Saya melihat ini sebagai idiomatik karena mereka mewakili cara melakukan sesuatu yang kurang umum, dan yang mewakili sesuatu pada inti dari filosofi domainnya. Ruby memiliki filosofi tentang interaksi dengan objek yang, meskipun tidak unik, tidak ada di mana-mana.
Pada catatan semantik, setiap kali saya mendengar kata idiomatis, otak saya secara otomatis melengkapi pemikiran itu sebagai "idiomatik untuk ..." - Saya hanya menguraikannya secara refleks terkait dengan subjek tertentu.
sumber
collection.each do |current|
bedanyaforeach(current in collection)
? Keduanya adalah konstruksi lingkaran yang disetelcurrent
ke setiap elemencollection
.Idiom biasanya merupakan cara terbaik untuk mengekspresikan situasi umum yang relatif kompleks dalam suatu bahasa. Bertambah bukanlah idiom atau semacamnya. Menggunakan kenaikan awalan alih-alih postfix, Anda bisa berargumen sebagai idiom C ++.
Idiom adalah cara terbaik untuk menggunakan bahasa, sebagaimana ditentukan oleh pengguna ahli. Sebuah idiom C ++ sesungguhnya adalah objek fungsi. Idiom lain adalah RAII. Tidak ada dalam bahasa yang memberitahu Anda bahwa Anda harus membebaskan sumber daya di destructor. Tapi itu idiomatis untuk melakukannya. Contoh lain adalah templat - adalah idiomatis untuk menggunakan templat untuk, yah, semua yang Anda bisa, tetapi tidak ada yang menghentikan Anda menggunakan warisan secara berlebihan.
sumber
Definisi Anda tidak menganggap saya benar. Sebuah idiom adalah cara menulis sesuatu yang mungkin atau mungkin tidak dapat dilakukan dalam bahasa lain, tetapi itu biasa dalam bahasa ini. Biasanya, ini lebih pendek daripada alternatifnya, tapi itu bukan persyaratan.
Mungkin lebih mudah untuk menjelaskannya dengan berbicara tentang apa yang non-idiomatis. Dalam C ++, cukup idiomatis untuk menulis:
Menulis lebih idiomatis:
Kode ini melakukan hal yang persis sama - beberapa orang yang baru mengenal C ++ mungkin membacanya sebagai pengujian untuk melihat apakah p sama dengan apa fungsi kembali, tetapi bukan itu yang dilakukannya.
Bandingkan dengan apa yang ditulis seseorang, sangat non-idiomatis, yang berasal dari bahasa lain:
Anda juga akan melihat barang-barang ini mengetuk sebagai non-idiomatik:
Karena pendekatan idiomatik adalah
Cara-cara non-idiomatis tidak salah, tetapi mereka biasanya membutuhkan waktu lebih lama untuk mengetik dan mereka selalu membutuhkan waktu lebih lama untuk membaca, bagi mereka yang tahu idiom. Jika saya menyebut Anda "bocah yang menangis serigala" dan Anda tahu ceritanya, itu lebih cepat daripada jika saya menjelaskan tentang bagaimana alarm palsu menyebabkan orang mengabaikan Anda. Masalahnya, tentu saja, adalah jika Anda tidak tahu ceritanya dan tidak tahu apa yang harus dilakukan serigala dengan apa yang kita bicarakan. Demikian pula, itu bisa menjadi masalah jika Anda belum pernah melihat
return x<y;
sebelumnya dan benar-benar tidak tahu apa fungsinya.sumber
if(Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y))
Ketika ada banyak cara untuk mengekspresikan sesuatu, cara yang paling umum atau diterima secara umum. Misalnya, menggunakan pernyataan terstruktur dalam C bukannya setara persis menggunakan pernyataan goto.
sumber