Apa perbedaan antara idiom dan pola-desain? Tampaknya terminologi ini tumpang tindih di suatu tempat; di mana tepatnya, saya tidak tahu. Apakah bisa dipertukarkan? Kapan saya harus menggunakan apa?
Berikut adalah daftar Idiom C ++. Bisakah saya menyebutnya pola desain?
Wikipedia mendefinisikan,
Pemrograman Idiom sebagai Pola Desain tingkat rendah
Apa artinya? Apa yang dimaksud dengan "level rendah" di sini?
Pertanyaan ini terinspirasi dari pertanyaan lain: https://stackoverflow.com/questions/7343531/are-the-some-design-patterns-language-dependent
Jawaban:
Idiom adalah ide untuk mengatasi quirks bahasa. Beberapa contoh yang muncul di benak Anda adalah salah satu idiom C ++ yang Anda tautkan dalam pertanyaan awal. Mereka memecahkan masalah umum dalam bahasa itu dengan cara kalengan.
Pola desain serupa, karena memecahkan masalah umum. Tetapi pola desain yang ideal didasarkan pada fitur-fitur bahasa umum, dan dengan demikian adalah bahasa agnostik.
Ada kontinum antara idiom dan pola desain, seperti halnya dari bahasa tingkat rendah ke bahasa tingkat tinggi.
Pola Pengunjung adalah contoh yang baik; jika hanya ada satu bahasa yang hanya mendukung pengiriman dinamis tunggal, maka kami dapat menganggap pola Pengunjung idiom bahasa itu. Tetapi ada segerombolan bahasa yang tidak secara langsung mendukung pengiriman ganda. Oleh karena itu, pola Pengunjung lahir.
Pola Observer juga muncul di benak Anda - C # langsung mendukungnya, sehingga tidak perlu bentuk pola penyelesaian yang umum.
Contoh ke arah lain adalah fitur OO (warisan, polimorfisme, dll). C tidak secara langsung mendukung mereka. Jika lebih banyak bahasa seperti C, maka kita dapat mengembangkan pola desain untuk mengimplementasikan v-tables, type-safety, dll. Karena banyak bahasa mendukung fitur tersebut, kami akan menyebut solusi umum apa pun dalam C idiom, daripada memanggil generalisasi solusi pola desain.
sumber
Pola desain biasanya tidak spesifik bahasa. Idiom bahasa cenderung bergantung pada fitur tertentu dari suatu bahasa (atau kelas bahasa) atau mengatasi kekurangan tertentu dalam bahasa tersebut.
sumber
Saya tidak akan menaruh terlalu banyak mata uang dalam definisi Wikipedia.
Paling tidak sebuah idiom adalah bahasa khusus sedangkan pola desain berusaha, atau harus berusaha, untuk menjadi agnostik bahasa. Lebih jauh, idiom biasanya konvensi untuk meningkatkan keterbacaan, atau merupakan alternatif yang unggul (pada beberapa kelebihan teknis) ketika ada lebih dari satu cara untuk melakukan sesuatu. Semua hal itu terkait dengan bagaimana ide-ide diekspresikan (kejelasan, verbositas, keringkasan), tetapi tidak dengan ide itu sendiri.
Di sisi lain, pola desain adalah esensi dari ide yang berulang, sebuah ide yang apriori dapat diekspresikan dalam bahasa apa pun yang cocok dengannya. Pengunjung adalah implementasi dari pengiriman ganda yang mengandalkan pengiriman tunggal dan kelebihan muatan dan ini dapat digunakan dalam bahasa apa pun yang memiliki pengiriman tunggal dan kelebihan muatan. Mengetahui tentang pola tidak membantu menulis kode yang lebih ekspresif atau lebih mudah dibaca, tetapi membantu memecahkan masalah terkait. Tidak ada yang idiomatis tentang itu karena misalnya tidak ada bentuk kanonik Pengunjung di misalnya C ++.
sumber
virtual
di beberapa tempat sedangkan pointer tulisan tangan untuk tipuan anggota tabel akan terlihat konyol.do_something() or die "...";
(dicuri dari komentar lain di sini). Ini didasarkan pada fitur bahasa tertentu, tetapi itu adalah cara umum untuk menggunakan fitur-fitur itu. Ini bukan lintas bahasa, dan mungkin tidak.Definisi bahasa Inggris yang normal dari Idiom. Merupakan ungkapan yang maknanya diterima tidak terkandung dalam kata-kata yang digunakan. Contohnya adalah "Kucing dan Anjing Raining" atau "Where's the Beef?"
Dalam bahasa pemrograman biasanya merujuk pada pintasan sintaksis yang melakukan sesuatu yang tidak langsung terlihat jelas dari kode itu sendiri tetapi yang cukup sering digunakan sehingga pemrogram lain mengenali artinya secara instan.
Perl mungkin bahasa yang paling idiom. Dengan konstruksi seperti:
Makna yang jelas bagi seorang programmer perl berpengalaman tetapi misteri bagi orang lain
sumber
do_something() or die "arrrrgh!";
Idiom adalah bahasa tertentu. Misalnya
while (*dest++=*src++);
adalah idiom C / C ++. Benar-benar mustahil untuk menulis sesuatu yang serupa di Pascal atau Java. Gunakan kata "idiom" saat Anda menggunakannya dalam bahasa Inggris. "Apa kabar?" sebagai salam adalah ungkapan. Beberapa bahasa seperti Jerman dan frensh memiliki idiom yang sama. Tetapi banyak bahasa lain tidak akan "meminta" sesuatu seperti ini sebagai salam. Pola (berorientasi objek) di sisi lain biasanya dapat diadaptasi ke dalam bahasa apa pun yang mendukung pewarisan dan pendelegasian. Sebuah idiom mungkin sesederhana satu baris kode. Pola desain selalu melibatkan beberapa kelas.sumber
A idiom might be as simple as one line of code. A design pattern always involves several classes.
Saya menemukan posting ini sedang mencari idiom C ++ umum, karena saya telah mendapatkan cukup dalam ke dalamnya baru-baru ini dan ingin kode saya tidak terlihat seperti amatir seperti yang saya rasakan ... :-P
Setelah menghabiskan sedikit waktu dengan Perl, saya menemukan idiom dalam bahasa itu sangat mirip dengan yang ditemukan dalam bahasa alami, seperti bahasa Inggris atau Spanyol (hanya dua yang saya kenal cukup baik untuk mengetahui beberapa idiom).
Saya tidak setuju bahwa idiom seperti "pola desain kecil". Saya masih tidak setuju, meskipun kurang begitu, bahwa idiom adalah cara untuk mengatasi kekurangan dalam bahasa.
Mungkin jawaban Luc Danton paling dekat, tetapi izinkan saya menjelaskannya. Saya pikir idiom adalah, baik, idiomatis dari mereka yang menggunakan bahasa tersebut. Biasanya, ekspresi umum atau urutan ekspresi yang, meskipun mungkin tidak jelas, melakukan operasi atau mengekspresikan niat dengan cara yang masuk akal bagi mereka yang cukup fasih untuk melihatnya sebelumnya.
Kembali ke Perl, mungkin idiom paling terkenal adalah " Schwartzian Transform ", sebuah ekspresi yang melakukan pengurutan data dengan cara yang ringkas dan efisien. Ini bukan cara yang paling jelas untuk melakukan operasi seperti itu, tetapi ini singkat dan mereka yang telah melihatnya sebelumnya tahu langsung apa yang dilakukannya.
Contoh penting lainnya adalah " The Orcish Maneuver ", yang mengambil keuntungan dari gagasan perl tentang benar / salah, operator kaya, dan prioritas operator.
Salah satu yang secara pribadi saya suka agak terkait dengan Manuver Orc, tapi saya tidak tahu nama untuk itu:
Ini memang bukan kebingungan, melainkan ekspresi yang jelas dan kompak dari sesuatu yang seharusnya mengambil beberapa baris untuk dilakukan. Jika kunci ada di hash dan memiliki nilai sebenarnya, de-referensi sebagai array dan dorong $ some_value ke array itu. Jika elemen hash tidak ada atau memiliki nilai salah, tetapkan itu array kosong, lalu ganti array itu dan lakukan push.
Perlu juga dicatat bahwa pada Perl 5.14, bagian dari idiom ini sudah usang - push sekarang dapat beroperasi langsung pada referensi array, tidak diperlukan @ {}! Juga, pada Perl 5.10, seseorang dapat menggunakan // = bukannya || = yang memeriksa bukan untuk kebenaran tetapi untuk definisi-ness.
sumber
some_dict.setdefault(key, []).append(some_value)
.Inti dari Idiom adalah menjadi ide atau konsep yang mencakup bahasa pemrograman, ini adalah cara melakukan sesuatu dan proses yang bekerja tanpa banyak restrukturisasi konseptual ketika Anda mengambilnya dari satu dan menempelkannya di yang lain, seperti semacam gelembung rendah . Pola desain adalah implementasi spesifik dari suatu idiom, atau perluasan ide yang cocok dengan bahasa, oleh karena itu Anda memiliki pola desain javascript dari idiom peristiwa-pendengar dll.
sumber
Design patterns are specific implementations of an idiom
? Bagaimana sebenarnya? Apakah Anda melihat idiom C ++, di tautan di pertanyaan saya?Saya tidak 100% yakin, tetapi idiom hanyalah istilah yang berkaitan dengan bidang tertentu. Ketika Anda mengatakan "pola desain", Anda berpikir tentang "Pola Pengamat" "Rantai tanggung jawab" "Pola pengunjung" "pabrik". Ini adalah pola umum yang digunakan untuk memecahkan masalah umum dalam pemrograman. Lihat di sini untuk daftar lengkap: http://en.wikibooks.org/wiki/C++_Programming/Code/Design_Patterns
sumber
Saya mengartikannya bahwa ini bukan cara abstrak tingkat tinggi untuk memodelkan aplikasi Anda atau komponen aplikasi Anda, tetapi sebaliknya menggunakan bahasa semantik yang pintar atau umum.
misalnya, menetapkan variabel jika bernilai false (biasanya digunakan untuk menetapkan variabel nil secara kondisional):
sumber
Berikut adalah contoh idiom (dalam C #) untuk menangani suatu peristiwa. Anda tidak boleh memecat suatu acara jika tidak ada penangan yang terpasang, jadi idiominya adalah untuk selalu memeriksa ini terlebih dahulu.
Oleh karena itu idiom umum untuk menangani acara menjadi:
Ungkapan ini khusus (meskipun tidak eksklusif) untuk bahasa C #.
Namun lebih umum, mekanisme acara C # adalah contoh dari pola desain pengamat yang dapat diimplementasikan dalam bahasa apa pun.
sumber