Programing

Android 튜토리얼의 대부분의 필드 (클래스 멤버)가 왜 m으로 시작합니까?

lottogame 2020. 2. 19. 21:21
반응형

Android 튜토리얼의 대부분의 필드 (클래스 멤버)가 왜 m으로 시작합니까?


나는 낙타 사건 규칙에 대해 알고 있지만이 m 규칙과 혼동됩니다. 그것은 무엇을 의미합니까? 저는 PHP 개발자입니다. "우리"는 부울의 경우 'b', 정수의 경우 'i'등 유형의 표시로 변수의 첫 문자를 사용합니다.

'm'은 Java입니까? 모바일을 의미합니까? 혼합?


이 표기법은 제공자를위한 AOSP (Android Open Source Project) 코드 스타일 지침 에서 비롯된 것입니다 .

필드 명명 규칙 준수

  • 공개되지 않은 비 정적 필드 이름은 m으로 시작합니다.
  • 정적 필드 이름은 s로 시작합니다.
  • 다른 필드는 소문자로 시작합니다.
  • 공개 정적 최종 필드 (상수)는 ALL_CAPS_WITH_UNDERSCORES입니다.

링크 된 스타일 가이드는 코드가 Android 오픈 소스 프로젝트에 기여하기위한 것입니다.

개별 Android 앱의 코드에 대한 스타일 가이드는 아닙니다.


많은 코딩 가이드 라인은 클래스의 '멤버'에 m을 사용합니다. 따라서 프로그래밍 할 때 로컬 변수와 멤버 변수의 차이를 확인할 수 있습니다.


m접두사 란 무엇입니까 ?

m멤버 변수 또는 데이터 멤버를 나타냅니다. m비 공용 및 비 정적 필드 에는 접두사를 사용하십시오 .

언제 사용합니까?

private String mCityName;
private float mTemperature;

언제 사용하지 않습니까?

public static int mFirstNumber;
public static final String mDATABASE_NAME;

내가 뭘?

개인적으로는 사용하지 않습니다. 코드가 더 복잡해지고 가독성이 떨어집니다. 코딩에 여전히 메모장을 사용하는 경우 단어가 없지만 최신 IDE는 멤버 및 로컬 변수 또는 다른 것을 강조 표시하고 채색 할 수 있습니다.

결론

사용하다? "예"또는 "아니오"는 개인적인 선택입니다.


클래스의 멤버 변수 인 경우 'm'은 'member'를 의미합니다. 많은 Java 프로그래머는 최신 IDE를 사용하지만 강조 표시, 마우스 오버 툴팁 등이 있으므로 필요하지 않습니다.


당신이 같은 문제가있는 경우

IDE에서 setter / getter를 생성하고 getmName () 및 setmName ()으로 끝납니다.

다음을 수행하는 것을 잊지 마십시오 ( Settings / Editor / Code Style / Java / Code Generation ) :

여기에 이미지 설명을 입력하십시오

업데이트 : 우리는 Kotlin에서 이와 같은 것을 사용하지 않습니다 (그래서 더 이상 접두사를 사용하지 않는 것이 좋습니다)


Clean Code book에 따르면 깨끗한 코드가 아닙니다.

멤버 변수 앞에 m 을 붙일 필요는 없습니다 . 게다가 사람들은 이름의 의미있는 부분을보기 위해 접두사 나 접미사를 무시하는 법을 빨리 배웁니다.


코드 규칙이 사용되는 것은 매우 개별적이라고 생각합니다. 다음 접두사로 변수 이름을 지정하는 것을 선호합니다.

  • m-메소드 변수
  • c-클래스 변수
  • p-매개 변수

그러나 각 프로그래머마다 고유 한 스타일이 있다고 생각합니다.


코드에서 변수 이름을 지정하기 위해이 규칙을 정의해서는 안된다는 것을 증명하기 위해 아래의 부모 Android Studio 에서 스크린 샷을 전달합니다 .

m- 변수를 기본 변수보다 낮추기 위해 특별히 정렬 된 객체 내부의 변수를 찾으십시오 . 따라서 코드에서 "m"접두어로 이름을 지정하면 자신의 힙에 숨길 수 있습니다 .

여기에 이미지 설명을 입력하십시오


앞에서 언급했듯이 다른 변수에 맞게 스타일이 지정됩니다. 또한 코드 생성에 매우 유용합니다. "Alt + Insert"를 누르면 가장 일반적인 코드 생성 속성에 대한 창이 나타납니다. 변수에 대해 "get"메소드를 생성하려는 경우 얻을 수 있습니다.

public class Foo{
   private int bar;

   public int getBar(){
       return this.bar;
   }

   public void setBar(int bar){
       this.bar = bar; 
   }

}

그러나 "m, s"를 선언하면 다음과 같은 결과가 나타납니다.

public class Foo{
private int mBar;

public int getBar(){
   return mBar;
}

public void setBar(int bar){
   mBar = bar;
}
}

생성자에서 자동으로 생성되고 "m"또는 "s"가 삭제되고 메소드 이름을 가져옵니다. 이 필드 뒤에 "get"및 "set"이 "m"없이 생성됩니다. Andoroid Fle-> 설정-> 코드 스타일-> Java-> 코드 생성. 그리고 그림과 같이 만드십시오. 아마 도움이 될 것입니다. 내 eng 죄송합니다. 안드로이드 구성


'm'으로 멤버 변수를 시작하는 것이 초기 Android / Google 엔지니어의 개인적인 선호로 보였으므로 권장했습니다.

이제이 규칙은 AOSP 기고자가 아닌 회사의 개발자들의 목을 강요하고 있습니다. 단순히 해당 페이지가 Android 코드 스타일 규칙으로 간주되기 때문입니다. 그 규칙에 어떤 이점이 있는지는 거의 없습니다. Google은 삭제를 고려해야합니다. 그렇지 않은 경우 Android 앱의 경우 코드 스타일 규칙 중 어느 것이 선택적인지 지정하십시오.

https://code.google.com/p/android/issues/detail?id=226814 규칙을 삭제하려면이 탄원서에 대한 지원 의견을 추가하십시오


이 코드 스타일에서 찾은 이점 중 하나는 변수에 대한 참조를 자동 완성하는 동안 "m"을 입력하여 멤버 변수 만 볼 수 있다는 것입니다.


또한 클래스 / 인스턴스에서 "이 변수는 내 변수이고 다른 사람은이 변수에 접근 할 수 없습니다"라고 말하는 것처럼 "광산"을 나타냅니다. 정적과는 다른 클래스에서만 사용할 수 있지만 해당 클래스의 모든 인스턴스에서 공유 할 수 있습니다. 원을 그리 듯이 각 원의 반지름이 얼마나 큰지 알아야합니다.

    private double mRadius;

동시에 카운터는 서클 클래스 내에서 모든 서클을 추적하기를 원합니다.

    private static int sCircleCount;

그리고 현재 보유하고있는 서클의 수를 늘리거나 줄일 정적 멤버 만 있습니다.


다음은 명명 규칙입니다.

  • 공개되지 않은 비 정적 필드 이름은 m으로 시작합니다.
  • 정적 필드 이름은 s로 시작합니다.
  • 다른 필드는 소문자로 시작합니다.
  • 공개 정적 최종 필드 (상수)는 ALL_CAPS_WITH_UNDERSCORES입니다.

예:

public class MyClass {
    public static final int SOME_CONSTANT = 42;
    public int publicField;
    private static MyClass sSingleton;
    int mPackagePrivate;
    private int mPrivate;
    protected int mProtected;
}

가독성을 m위해 sAndroid Studio와 같은 최신 IDE를 사용하는 경우 멤버 변수 및 정적 필드 의 규칙을 더 이상 사용해서는 안됩니다. 안드로이드 스튜디오는 추가하지 않고 그 구별 할 수 있습니다 m또는 s.

참고 URL : https://stackoverflow.com/questions/2092098/why-do-most-fields-class-members-in-android-tutorial-start-with-m



반응형