Apa daya tarik Sistem Hongaria? [Tutup]


18

Di Panduan penamaan apa yang Anda ikuti? , kata penulis:

Saya juga lebih suka kode menggunakan notasi hungaria dari Charles Simonyi.

Saya telah menjalankan beberapa programmer yang masih lebih suka menggunakan bahasa Hongaria, sebagian besar dari rasa Petzold / Sistem Hungaria. Pikirkan dwLength = strlen(lpszName).

Saya sudah membaca Making Wrong Code Look Wrong , dan saya mengerti alasan untuk Apps Hungarian, di mana informasi tipe domain termasuk dalam nama variabel. Tapi saya tidak mengerti nilai dari penyesuaian jenis kompiler dengan nama.

Mengapa programmer masih tetap menggunakan gaya notasi ini? Apakah ini hanya kelembaman? Apakah ada manfaat yang melebihi penurunan keterbacaan? Apakah orang hanya belajar mengabaikan dekorator ketika membaca kode, dan jika demikian, bagaimana mereka terus menambah nilai?

EDIT: Banyak jawaban yang menjelaskan sejarah, atau mengapa itu tidak lagi relevan, yang keduanya tercakup dalam artikel yang saya kutip.

Saya benar-benar ingin mendengar dari siapa pun di luar sana yang masih menggunakannya. Mengapa Anda menggunakan itu? Apakah ini sesuai standar Anda? Apakah Anda akan menggunakannya jika tidak diperlukan? Apakah Anda akan menggunakannya pada proyek baru? Apa yang Anda lihat sebagai keuntungannya?


5
Notasi Hungaria adalah hal yang populer ketika saya mulai di IT, tapi itu adalah lingkungan pengkodean yang sepenuhnya. Editor teks sederhana tanpa highlight, intellisense, dan file kode yang panjangnya beberapa ratus baris dengan semua variabel dideklarasikan di awal. Itu hanya membuat hidup lebih mudah dalam mencari tahu apa yang sedang Anda hadapi. Namun dengan alat dan praktik modern, kebutuhan akan hal itu sudah menjadi pilihan saya dan harus benar-benar dimasukkan ke dalam sejarah
GrumpyMonkey

1
Saya menggunakan itu tahun lalu dan tidak pernah menyukainya. Saya tidak ketinggalan sama sekali.
MetalMikester

imo masalah terbesar dengan itu menggunakan awalan daripada akhiran - bahkan dalam aplikasi hungaria 'kutil' biasanya mengandung informasi semantik lebih sedikit daripada sisa nama
jk.

Jawaban:


38

Saat ini saya masih menggunakan bahasa Hongaria untuk tiga alasan , dengan bijaksana menghindarinya untuk hal lain:

  1. Agar konsisten dengan basis kode yang ada saat melakukan perawatan.
  2. Untuk kontrol, mis. "txtFirstName". Kita sering perlu membedakan antara (katakanlah) "firstName" nilai dan "firstName" kontrol. Hongaria menyediakan cara mudah untuk melakukan ini. Tentu saja, saya bisa mengetikkan "firstNameTextBox", tetapi "txtFirstName" sama mudahnya untuk dipahami dan lebih sedikit karakter. Selain itu, menggunakan bahasa Hongaria berarti bahwa kontrol dari jenis yang sama mudah ditemukan, dan sering dikelompokkan berdasarkan nama dalam IDE.
  3. Ketika dua variabel memiliki nilai yang sama tetapi berbeda berdasarkan tipe. Misalnya, "strValue" untuk nilai yang sebenarnya diketik oleh pengguna dan "intValue" untuk nilai yang sama setelah diuraikan seperti dalam integer.

Saya tentu tidak ingin mengatur ide-ide saya sebagai praktik terbaik, tetapi saya mengikuti aturan ini karena pengalaman memberi tahu saya bahwa kadang-kadang penggunaan kode tunjangan Hongaria dapat dipertahankan tetapi biayanya kecil. Yang mengatakan, saya terus-menerus meninjau praktik saya sendiri, jadi mungkin melakukan sesuatu yang berbeda ketika ide-ide saya berkembang.


Memperbarui:

Saya baru saja membaca artikel berwawasan oleh Eric Lippert, menjelaskan bagaimana Hongaria dapat membantu membuat kode yang salah terlihat salah. Layak dibaca.


Jawaban luar biasa, kunang-kunang menjawab pertanyaan yang diajukan.
AShelly

baru saja memperhatikan pengeditan kreatif iphone saya ... gsub ('firefly', 'sepenuhnya');
AShelly

5
+1 untuk menggunakan quasi-Hungaria untuk memfasilitasi pengelompokan kontrol UI di IDE. Ini adalah satu-satunya kegunaan yang masih masuk akal untuk proyek-proyek baru, dan saya tidak bisa hidup tanpanya. Saya sering tahu kontrol adalah kotak teks, tetapi tidak tahu apakah itu disebut "Nama Depan" atau hanya "Nama".
Cody Grey

2
Saya setuju dengan jawaban ini. Tentang menggunakan intValue dan strValue, Anda juga dapat melihatnya sebagai valueAsInt dan valueAsStr, jadi saya tidak tahu apakah saya menganggap notasi hungaria ini, lebih seperti int dan str adalah bagian dari nama variabel.
Michel Keijzers

2
2 Saya lebih suka sufiks penuh karena awalan bisa menjadi sangat konyol (apa itu a tssbatau a tsddi? Ya, mereka ada). Singkatan juga memiliki masalah keseragaman, TextBoxkarena mungkin ada ketidakkonsistenan tentang apakah itu tbatau txt(saya pribadi melihat seorang 'senior' yang menggunakan keduanya pada satu jendela). Untuk 3 saya drop Hungaria ketika variabel mencapai tipe yang dimaksudkan akhir (misalnya saya akan menggunakan valuedan strValuedalam contoh Anda).
Jonathan Dickinson

6

Saya bukan penggemar menggunakan notasi hungaria tetapi berpikir seperti ini:

  • Kami juga dapat melihat bahwa lebih cepat menemukan string yang merujuk ke TextBox dalam kode Anda: dengan mengetikkan "txt" di kotak pencarian Anda.

Tidak bayangkan sebaliknya, di mana setiap elemen memiliki namanya sendiri. Mungkin lebih lambat bagi Anda untuk menemukan ke mana Anda ingin pergi, bukan?

Hal yang sama berlaku untuk ddl ketika kita ingin merujuk ke DropDownList, lebih mudah atau tidak? :)

Orang tidak akan menghabiskan banyak waktu untuk menemukan di mana elemen ini.

Penggunaan awalan tidak dapat digunakan untuk kompiler bahasa modern seperti C #, tetapi dapat digunakan (dapat dibaca) untuk manusia.


Ini adalah contoh terbaik dari nilai praktisnya yang pernah saya dengar. (Tapi masih belum cukup untuk membuat saya mengadopsinya :)
AShelly

1
Awalan tidak pernah untuk penyusun, selalu untuk orang. Apa yang telah berubah bukanlah kompiler tetapi IDE yang menyediakan informasi jenis dan cara yang lebih efektif untuk menavigasi kode Anda.
Jeremy

Saya akan melakukan hal yang sama dengan variabel dan (terutama) widget - sering memberi mereka awalan pendek untuk menunjukkan tipe mereka. Tetapi tidak sampai pada titik "sepenuhnya hungaria" pada mereka.
GrandmasterB

4

Aplikasi Hungarian (tag untuk menunjukkan sifat semantik dari objek yang tidak dapat diekspresikan melalui sistem tipe) adalah cara yang masuk akal untuk menangani beberapa kesalahan umum ketika menggunakan bahasa yang diketik dengan lemah pada awal 1980-an. Mereka melayani sedikit tujuan dalam bahasa yang sangat diketik saat ini.

Sistem Hongaria (tag untuk menunjukkan tipe objek secara berlebihan) tidak pernah melayani tujuan apa pun kecuali untuk memaksakan penampilan seragam yang dangkal pada basis kode. Itu dibuat dan disebarkan oleh manajer non-teknis, dan programmer yang tidak berpengalaman, yang salah paham maksud Apps Hungarian, dan percaya bahwa kualitas kode dapat ditingkatkan dengan pedoman pengkodean yang kompleks.

Kedua gaya berasal dari Microsoft. Saat ini, konvensi penamaan Microsoft dengan tegas mengatakan "Jangan gunakan notasi Hongaria."


4

Jika Anda menemukan sistem awalan yang tepat, Anda dapat menyebarkan keausan kunci Anda, yang akan mengurangi pengeluaran untuk keyboard pengganti.


Saya kira saya bisa mengembangkan ini. Saya telah menggunakan SH di tempat kerja saya untuk yang terakhir, oh, sepuluh tahun atau lebih (karena itu dalam Standar kami). Itu tidak pernah membantu memecahkan masalah.

Di sisi lain, saya telah menggunakan variabel tanpa hiasan tapi nama baik dalam 'kode rumah' saya selama hampir sama. Saya tidak pernah melewatkan SH.

Di kedua tempat, saya memiliki kode protokol tertulis yang memerlukan tipe primitif ukuran tetap. Ini adalah kasus penggunaan paling bermanfaat yang bisa saya pikirkan untuk SH. Itu tidak membantu bahwa saya bisa tahu ketika ditulis dengan SH, dan itu tidak merintangi saya ketika ditulis tanpa SH.

Jadi, sebagai kesimpulan, satu-satunya perbedaan yang bisa saya lihat adalah keausan pada keyboard Anda.


1
seperti sarkasme di sana :)
JohnL

4

Saya sebenarnya mulai menggunakan SH dalam kode baru yang saya tulis bulan ini.

Tugas saya melibatkan penulisan ulang beberapa kode Perl di JS sehingga dapat dipindahkan ke sisi klien dari aplikasi web kami. Dalam Perl, SH umumnya tidak diperlukan karena sigils ($ string, @array,% hash).

Dalam JavaScript, saya menemukan SH sangat berharga untuk melacak tipe struktur data. Sebagai contoh,

var oRowData = aoTableData[iRow];

Ini mengambil objek dari array objek menggunakan indeks integer. Mematuhi konvensi ini menghemat waktu untuk mencari tipe data. Plus, Anda dapat membebani nama variabel singkat ( oRowvs. iRow).

tl; dr: SH bisa menjadi luar biasa ketika Anda memiliki kode kompleks dalam bahasa yang diketik dengan lemah. Tetapi jika IDE Anda dapat melacak tipe, pilih itu.


2

Saya juga ingin tahu alasannya. Kami tahu mengapa mereka menggunakannya di masa lalu: kurangnya dukungan IDE untuk informasi jenis. Tapi sekarang? Sederhananya, saya pikir itu adalah tradisi. Kode C ++ selalu terlihat seperti ini, jadi mengapa harus mengubahnya? Selain itu, ketika Anda membangun di atas kode sebelumnya yang menggunakan notasi Hungaria, itu akan terlihat sangat aneh ketika Anda tiba-tiba berhenti menggunakan itu ...


2
Kode C ++ tidak selalu terlihat seperti ini - lihat buku Bjarne Stroustrup.
JBRWilkinson

@JBRWilkinson: Charles Simonyi telah membuat Notasi Hongaria sekitar tahun 1976 ( c2.com/cgi/wiki?HungarianNotation ). Jadi notasi ini sebenarnya ada sebelum C ++. Banyak jika bukan kebanyakan programmer C ++ telah menggunakannya sejak hari 1 (dari pengkodean mereka, yaitu). Saya mengerti bahwa Bjarne Stroustrup adalah pengecualian penting, begitu juga Linus Torvalds, tetapi itu tidak mengubah fakta.
Paweł Dyda

2
Saya pikir bahasa Hongaria selalu merupakan hal yang utama bagi Microsoft. Saya tidak melihatnya banyak digunakan di lingkungan Unix dan Unix.
David Thornley

2

Notasi Sistem Hungaria sebenarnya sedikit sombong, kesalahpahaman dari istilah 'tipe'. Pengembang sistem menganggapnya secara harfiah sebagai jenis kompiler (kata, byte, string, ...) sebagai lawan dari tipe domain aplikasi (baris indeks, indeks kolom, ...).

Tapi saya kira setiap pengembang melewati beberapa fase gaya yang tampak seperti ide bagus pada saat itu (dan tipe awalan sepertinya ide yang bagus untuk pemula) sebelum jatuh ke dalam perangkap (mengubah tipe, membuat awalan baru yang bermakna, dll). Jadi saya kira ada inersia: dari pengembang yang tidak menjadi lebih baik dan menyadari mengapa itu pilihan yang buruk, dari pengembang terjebak dengan standar pengkodean yang mengamanatkan praktik dan dari orang yang menggunakan <windows.h>. Akan terlalu mahal bagi Microsoft untuk mengubah untuk menyingkirkan notasi awalan (yang salah di banyak tempat: WPARAM?).


1
Bahkan penggunaan yang dimaksud kurang optimal karena ia menciptakan sistem tipe privat yang tidak diketahui oleh kompiler, dan karenanya tidak dapat mengetikkan centang.
Larry Coleman

@ Larry: Walaupun itu benar, ada perangkat lunak yang tersedia yang dapat menguraikan kode sumber dan memeriksa kode sesuai dengan standar. Mereka mungkin dapat memastikan bahwa awalan cocok dengan ekspresi.
Skizz

1
Cita-cita saya saat menggunakan pengetikan statis adalah memiliki sekumpulan tipe kompiler menjadi superset dari sekumpulan tipe domain. Kemudian kompiler dapat memeriksa semuanya, tidak perlu add-on.
Larry Coleman

0

Ada satu hal yang hilang dari orang Hongaria. Notasi Hungaria benar-benar berfungsi BESAR dengan pelengkapan otomatis.

Katakanlah Anda memiliki variabel, dan namanya intHeightOfMonster.

Katakan Anda lupa nama variabel

Bisa jadi tinggi dari Monster atau MonsterHeight atau MeasurementMonsterHeight

Anda ingin dapat mengetik surat dan mendapatkan saran pelengkapan otomatis untuk Anda beberapa nama variabel.

Mengetahui bahwa heightOfMonster adalah sebuah int, Anda cukup mengetikkan i dan voila.

Menghemat waktu.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.