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
위해 s
Android Studio와 같은 최신 IDE를 사용하는 경우 멤버 변수 및 정적 필드 의 규칙을 더 이상 사용해서는 안됩니다. 안드로이드 스튜디오는 추가하지 않고 그 구별 할 수 있습니다 m
또는 s
.
'Programing' 카테고리의 다른 글
반복자를 스트림으로 변환하는 방법? (0) | 2020.02.20 |
---|---|
MySQL 데이터베이스에 위도 / 경도를 저장할 때 사용하기에 이상적인 데이터 유형은 무엇입니까? (0) | 2020.02.20 |
매개 변수 이름 반영 : C # 람다 식 남용 또는 구문 광택? (0) | 2020.02.19 |
Python을 사용하여 Selenium WebDriver에서 WebElement의 HTML 소스 가져 오기 (0) | 2020.02.19 |
"예기치 않은 토큰 o"오류를 발생시키는 JSON 구문 분석 (0) | 2020.02.19 |