Apa manfaat dari awalan nama parameter fungsi dengan p *?

22

Saya sering melihat proyek (dalam proyek dan tim Java menggunakan Eclipse) yang awalan dengan parameter fungsi p.

Sebagai contoh

public void filter (Result pResult) ...

Saya pribadi tidak melihat adanya manfaat dalam hal ini, tetapi ingin tahu apa alasannya. Penjelasan terbaik yang pernah saya dengar adalah bahwa itu adalah untuk membedakan nama bidang bernama identik. Saya punya masalah dengan penjelasan itu tetapi saya bisa mengerti intinya.

oschrenk
sumber

Jawaban:

34

Praktik-praktik menambahkan awalan yang bermakna pada simbol-simbol, seperti Notasi Hongaria yang dipublikasikan dengan baik , berasal dari masa ketika IDE tidak ada atau terlalu primitif. Hari ini, ketika menemukan titik deklarasi adalah klik mouse, tidak ada gunanya merusak bagian paling berharga dari nama, beberapa huruf pertamanya, dengan menetapkan awalan umum.

dasblinkenlight
sumber
10
Sistem Notasi Hongaria adalah praktik buruk yang harus dihindari. Di sisi lain, beberapa Aplikasi Hungaria Notation dapat berguna (seperti untuk mencegah input pengguna yang tidak aman dari disalahgunakan).
Casey Kuball
7
@Darthfett: Bahkan notasi semacam itu sepertinya mencoba untuk mengimplementasikan sistem ad-hoc, tipe manual secara langsung dalam nama variabel. Cukup gunakan bahasa yang diketik secara statis dengan baik dan miliki sistem lacak tipe nyata seperti itu untuk Anda secara otomatis!
Tikhon Jelvis
1
@WyattBarnett Systems Bahasa Hongaria tidak memberikan informasi yang berguna kepada programmer dengan IDE modern. Aplikasi Hungaria dapat mengurangi sakit kepala dalam ulasan kode saat diterapkan dengan benar.
Casey Kuball
2
@TikhonJelvis Tidak semua bahasa mendukung typedef yang sangat ditegakkan (mis. C ++ typdefs ). Untuk bahasa yang mendukungnya, Anda benar.
Casey Kuball
4
@ Darthfett: Di C / C ++ Anda bisa membungkusnya dengan struct/ uniondengan satu elemen.
Maciej Piechotka
9

Seperti yang Anda duga, ini untuk menghindari tabrakan nama antara nama parameter dan nama variabel anggota atau lokal. Variabel anggota kadang-kadang diberi awalan untuk alasan yang sama (misalnya, m_result). Secara pribadi, saya lebih suka menggunakan thisawalan untuk variabel anggota jika ada tabrakan nama. Itu dibangun ke bahasa dan semua orang sudah tahu apa artinya.

Bill the Lizard
sumber
Itu yang saya lakukan. Tidak menggunakan awalan juga membantu Eclipse saat memanggil metode. Jika Anda membuat pohon objek dan memberi nama variabel seperti nama parameter dari metode yang ingin Anda panggil, itu berfungsi seperti pesona, tetapi jika nama parameter diawali, ini tidak berfungsi.
oschrenk
5

Saya hanya menggunakan awalan parameter ketika parameter dimaksudkan untuk ditugaskan ke variabel anggota, seperti konstruktor atau penyetel.

Paint (newColor) {
  color = newColor;
}

Bagi saya, saya menemukan bahwa menggunakan nama variabel yang berbeda lebih jelas daripada menggunakan awalan "ini".

Untuk situasi lain, saya menghindari menggunakan parameter yang dapat dengan mudah dikacaukan dengan variabel anggota.

Jika suatu metode atau kelas sangat besar sehingga sulit untuk mengatakan apa arti variabel, solusi sebenarnya adalah memecahnya menjadi metode / kelas yang lebih kecil. Menggunakan awalan adalah solusi bantuan-band yang mengatasi masalah mendasar.

Aaron Kurtzhals
sumber
Secara pribadi, saya lebih suka menyingkat nama parameter dalam kasus itu (misalnya, Paint (clr) { color = clr; }). ... Biasanya tidak ada banyak ambiguitas, meskipun color -> clrsecara khusus mungkin pengecualian.
Justin Time 2 Reinstate Monica
1

Jika Anda membuat standar untuk menggunakan 'p' sebagai awalan dengan setiap nama parameter metode, Anda dapat dengan mudah mengenali parameter metode di seluruh tubuh metode.

Menghemat waktu Anda untuk menemukan parameter metode. Anda dapat men-debug kode Anda dengan mudah.

Satish Pandey
sumber
1
Jika Anda tidak dapat memberi tahu apa itu parameter dan apa yang tidak - metode Anda mungkin ditulis dengan buruk. Mungkin terlalu lama atau menggunakan terlalu banyak variabel tidak terstruktur? Either way sepertinya masalah yang berbeda yang diatasi dengan menambahkan awalan yang tidak perlu.
jakubiszon
1

Pendek - Praktek ini membuat kode lebih sulit dibaca.

Lama - saya akan berpendapat ini adalah praktik buruk yang hanya digunakan untuk mendukung praktik buruk lainnya. Mari kita periksa beberapa alasan mengapa menggunakan awalan seperti itu dapat dianggap bermanfaat:

  • Menghindari tabrakan dalam nama variabel

    • Apakah nama parameter Anda mengungkapkan dengan tepat apa parameternya? Jika Anda memiliki parameter dan bidang kelas yang "persis sama" Anda tidak perlu parameter.
    • Dalam hal ini masuk akal untuk menggunakan awalan untuk konstruktor kelas seperti awalan * baru yang dijelaskan dalam jawaban Harun. Mungkin juga berguna untuk metode penyetel misalnya

    public void setHeight(int newHeight) { this.height = newHeight; }

  • Metode mengambil banyak params, mendeklarasikan banyak variabel dan kita bisa dengan mudah lupa yang mana adalah parameter.

    • Seperti dijelaskan di atas - masalahnya terletak pada jumlah variabel.
    • Program ini mungkin tidak terstruktur dengan baik. Periksa apakah semua variabel "independen" - mungkin mereka harus diatur dalam struktur atau kelas. Mungkin seluruh perhitungan atau proses harus dibungkus dalam kelas yang terpisah hanya untuk beroperasi pada sejumlah variabel.
    • Bahkan jika Anda membutuhkan jumlah variabel seperti itu - mereka harus menggunakan nama yang bermakna dan awalan berdiri di antara Anda dan bagian yang bermakna.
  • Metode sangat panjang dan Anda perlu menggunakan awalan untuk melacak apa yang dimaksud dengan param.
    • Masalahnya terletak pada panjang metode - Jika sebuah program ditulis dengan baik Anda harus selalu melihat header metode dan seluruh tubuhnya pada layar tunggal.
    • Coba pisahkan metodenya menjadi blok yang lebih kecil.

Kecuali beberapa kasus tertentu menambahkan awalan parameter hanya membantu dengan gejala dan tidak memecahkan masalah yang sebenarnya.

jakubiszon
sumber
0

Saya penggemar iParam untuk in, dan oParam untuk parameter keluar. Saya akan mengatakan cParam untuk perubahan, tetapi itu tidak dapat diterima

Paul
sumber
2
Bisakah Anda menjelaskan mengapa Anda penggemar awalan ini, apa yang Anda peroleh dengan menggunakannya?
Peter