P * ile önekleme fonksiyon parametre isimlerinin faydaları nelerdir?


22

İşlev parametrelerini önekleyen projeleri (Java projelerinde ve Eclipse kullanan ekiplerde) sık sık görüyorum p.

Örneğin

public void filter (Result pResult) ...

Şahsen bunun bir yararı görmüyorum, ancak nedeninin ne olduğunu bilmek istiyorum. Şimdiye kadar duyduğum en iyi açıklama, aynı adlandırılmış alanların adını ayırt etmektir. Bu açıklama ile ilgili sorunlarım var ancak konuyu anlayabiliyorum.

Yanıtlar:


34

İyi tanıtılmış Macar Notasyonu gibi sembollere anlamlı önek ekleme uygulamaları, IDE'lerin olmadığı ya da çok ilkel olduğu zamanlara dayanıyor. Bugün, bir bildirim noktası bulmak bir fare tıklaması uzakta olduğunda, ortak bir önek atayarak, adın en değerli kısmını, ilk birkaç harfini bozmanın bir anlamı yoktur.


10
Sistemler Macar Notasyonu, kaçınılması gereken korkunç bir uygulamadır. Öte yandan, bazı Apps Hungarian Notation (güvenli olmayan kullanıcı girişinin kötüye kullanılmasını önlemek gibi) yararlı olabilir .
Casey Kuball

7
@Darthfett: Bu tür bir Macar gösterimi bile geçici, manuel tip bir sistemi doğrudan değişken isimlerine uygulamaya çalışıyor gibi görünüyor. Sadece statik olarak yazılmış bir dil kullanın ve gerçek bir tür sistemin sizin için otomatik olarak böyle şeyleri izlemesini sağlayın!
Tikhon Jelvis

1
@WyattBarnett Sistemleri Macarca, bir programcıya modern IDE'ler ile ilgili faydalı bilgiler vermez. Uygulamalar Macarca, doğru şekilde uygulandıklarında kod incelemelerinde baş ağrısını azaltabilir.
Casey Kuball

2
@TikhonJelvis Tüm diller, kuvvetli bir şekilde uygulanan tip tanımlarını desteklemez (örn. C ++ typdefs ). Bunu destekleyen diller için oldukça haklısın.
Casey Kuball

4
@Darthfett: C / C ++ ' da tek bir öğeyle struct/ unioniçine sarabilirsiniz .
Maciej Piechotka

9

Şüphelendiğiniz gibi, parametre adı ile üye veya yerel değişken adları arasındaki ad çakışmalarını önlemektir. Üye değişkenlere bazen aynı sebepten dolayı bir ön ek verilmektedir (örneğin, m_result). Şahsen, thisisim çarpışması varsa sadece üye değişkenler için öneki kullanmayı tercih ederim . Dilde yerleşiktir ve herkes ne anlama geldiğini zaten bilir.


Yaptığım budur. Bir önek kullanmamak, yöntemi çağırırken Eclipse'de de yardımcı olur. Nesne ağacınızı oluşturup çağırmak istediğiniz yöntemin parametre adları gibi değişkenleri adlandırırsanız, bir cazibe işlevi görür, ancak parametre adları önceden belirtilmişse bu çalışmaz.
oschrenk

5

Parametrenin yalnızca bir kurucu veya ayarlayıcı gibi bir üye değişkenine atanması amaçlandığında parametre öneki kullanıyorum.

Paint (newColor) {
  color = newColor;
}

Benim için, farklı bir değişken adı kullanmanın "this" önekini kullanmaktan daha kör bir şekilde açık olduğunu buldum.

Diğer durumlar için, üye değişkenle kolayca karışabilecek bir parametre kullanmaktan kaçınıyorum.

Bir yöntem veya sınıf o kadar büyükse değişkenlerin ne anlama geldiğini söylemek zorsa, asıl çözüm onu ​​daha küçük yöntemlere / sınıflara bölmektir. Önekleri kullanmak, altta yatan soruna yönelik bir yara bandı çözümüdür.


Şahsen, bu durumda parametre adını kısaltmayı tercih ederim (örn Paint (clr) { color = clr; }.). ... Genelde çok fazla belirsizlik yoktur, ancak color -> clrözellikle de bir istisna olabilir.
Justin Time 2

1

'P' yi her bir yöntem parametresi adıyla önek olarak kullanmak için bir standart yaparsanız, yöntem parametrelerinin kalanını kullanarak yöntem parametrelerini kolayca tanıyabilirsiniz.

Yöntem parametrelerini bulmak için zaman kazandırır. Kodunuzu kolayca hata ayıklayabilirsiniz.


1
Neyin parametre olduğunu ve neyin olmadığını söyleyemiyorsanız - yönteminiz muhtemelen kötü yazılmıştır. Belki de çok uzun veya çok fazla yapılandırılmamış değişken kullanıyorsunuz? Her iki şekilde de, gereksiz önek ekleyerek ele alınan farklı bir sorun gibi görünüyor.
jakubiszon

1

Kısa - Bu uygulama kodu okumayı zorlaştırır.

Uzun - Bunun sadece diğer kötü uygulamaları desteklemek için kullanılan kötü bir uygulama olduğunu iddia edeceğim. Bu önekleri kullanmanın neden yararlı olabileceğinin birkaç nedenini inceleyelim:

  • Değişken isimlerinde çarpışmaları önleme

    • Parametre adlarınız tam olarak parametrelerin ne olduğunu ifade ediyor mu? "Tam olarak aynı" bir parametre ve sınıf alanınız varsa, bir parametreye ihtiyacınız yoktur.
    • Bu durumda, yalnızca Aaron'un cevabında açıklanan yeni * öneki gibi sınıf yapıcıları için öneklerin kullanılması anlamlı olur. Örneğin, belirleyici yöntemleri için de yararlı olabilir

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

  • Yöntemler çok fazla paragraf alır, çok fazla değişken bildirir ve hangisinin parametre olduğunu kolayca unutabiliriz.

    • Yukarıda açıklandığı gibi - sorun değişkenlerin sayısındadır.
    • Program muhtemelen iyi yapılandırılmamış. Tüm değişkenlerin "bağımsız" olup olmadığını kontrol edin - belki yapılar veya sınıflar halinde düzenlenmelidirler. Belki de tüm hesaplama veya işlem, yalnızca bu kadar değişkende işlem yapmak için ayrı bir sınıfa sarılmalıdır.
    • Bu kadar değişkene ihtiyacınız olsa bile - anlamlı isimler kullanmalılar ve önek siz ve anlamlı kısım arasında duruyor.
  • Yöntemler çok uzun ve bir param nedir takip etmek için önekleri kullanmanız gerekir.
    • Sorun, yöntemlerin uzunluğunda yatmaktadır - Bir program iyi yazılmışsa, her zaman yöntem başlığını ve tüm gövdesini tek ekranda görmelisiniz.
    • Yöntemi daha küçük bloklara bölmeyi deneyin.

Bazı özel durumlar dışında, parametre önekleri eklemek sadece belirtilere yardımcı olur ve gerçek sorunları çözmez.


0

Giriş için iParam ve çıkış parametreleri için oParam hayranıyım. Değişim için cParam derdim, ama bu kabul edilebilir değil.


2
Neden bu ön ekin hayranı olduğunuzu açıklayabilir misiniz?
Peter,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.