Android ID 명명 규칙 : 밑줄이있는 소문자 대 낙타 대문자


89

저는 현재 Android 용 애플리케이션을 프로그래밍하고 있습니다. 이제 내가 알아 낸 것은 드로어 블 폴더에 이미지와 같은 리소스 개체를 배치하고 이름을 "myTestImage.jpg"와 같이 지정할 수 없다는 것입니다. 낙타 케이스 구문이 허용되지 않기 때문에 컴파일러 오류가 발생하므로 "my_test_image.jpg"와 같이 이름을 변경해야합니다.

그러나 XML 파일에서 정의한 ID는 어떻습니까? 다음과 같은 정의가 있다고 가정하십시오.

<TextView android:id="@+id/myTextViewFirstname"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Firstname" />

이것은 유효한 정의이며 내 Android 에뮬레이터에서 잘 컴파일되고 작동하지만-보시다시피 낙타 케이스 구문에 ID를 지정하고 있습니다.

이제 Android 샘플은 항상 소문자와 밑줄을 사용합니다. 이것은 ID에 밑줄과 함께 소문자를 사용하는 명명 규칙입니까, 아니면 실제 장치에서 문제를 일으킬 수 있습니까?

고마워

답변:


87

낙타 케이스 ID 이름을 사용하면 장치가 불평하지 않습니다. 내 첫 번째 응용 프로그램의 경우 모든 ID를 낙타 케이스로 작성했습니다. Java 코드에서 더 잘 보이고 잘 작동한다고 생각하기 때문입니다.

하지만 낙타 케이스에 대해서는 천천히 마음을 바꾸고 있습니다. 두 가지 다른 이름 지정 규칙을 사용하기 때문입니다. 예를 들면 다음과 같습니다.

// This must be undescored due to naming constrictions
setContentView(R.layout.my_long_layout_name);

// Now this looks a little out of place
findViewById(R.id.myLongSpecificId);

나도 여기의 표준에 대해 궁금합니다. Google은 그들의 예에서 일관성이 없습니다. 때로는 모두 소문자를 사용하고 때로는 밑줄을 삽입하고 때로는 낙타 대문자를 사용합니다.


18
예, 그게 바로 제 문제입니다. XML 레이아웃 정의 내에서 컨트롤 / 위젯을 참조하는 ID에 대해 camel-case 또는 underscored를 사용할 수있는 동안 레이아웃에 밑줄이있는 명명 규칙을 사용하도록 강제합니다. Google은 여기에 몇 가지 표준을 정의해야합니다 (아직없는 경우 적어도 아무것도 찾지 못함). 따라서 한 가지 방법은 레이아웃을 참조하든 ID 참조 필드를 참조하든 애플리케이션 전체에서 일관성을 유지하는 것이 가장 좋습니다.
Juri

호기심을 위해 : Google이 일치하지 않는 링크가 있습니까?
Juri 2009.12.03

6
더 혼동하기 위해 프로젝트 템플릿의 스타일 이름 (스타일의 ID와 비슷 함)은 PascalCase를 사용합니다 (예 : AppBaseThemeAppTheme.
Edward Brey 2013 년

4
밑줄 방법은 일반적으로 내가 참여한 팀에서 훨씬 읽기 어려운 것으로 간주됩니다. 리소스 파일 이름의 다소 이상한 제한이 낙타 케이스로 허용되지 않는 것은 나머지 Java 인터페이스에 대한 생각을 오염시키지 않아야합니다.-camelCase는 확고하게 뿌리 박혀 있고 명명 규칙에서 새로운 "_"스타일을 강요 한 것에 대해 감사 할 사람이 없다고 생각합니다.
RichieHH 2014 년

3
@RichardRiley 나는 밑줄과 같이 단어 경계가 적절하게 정의되고 낙타 케이스와 함께 뭉쳐 져서 낙타 케이스보다 밑줄로 구분 된 이름을 파싱하는 것이 더 쉽다는 것을 발견했습니다.
JAB 2014

13

android.R.id.*필드 를 살펴보면 모두 낙타 케이스에 있음을 알 수 있습니다. 따라서 Android ID가 낙타 케이스로 작성되면이 규칙을 따라야한다고 생각합니다. :)


그들은 camelCase에서 만들어 졌기 때문에 거기에 camel case에 있습니다. 이것은 커뮤니티 전체에 대한 코딩 스타일 선례를 설정하지 않으며 원본 포스터가 요구하는 ID 문자열의 리소스 파일 이름 지정 규칙과 관련이 없습니다.
RichieHH 2014 년

3
예, 그들은 낙타 케이스로 만들어졌습니다. 그러나 이러한 ID는 Android API 자체에서 가져온 것이므로 API 작성자가 camel 케이스를 사용했다면 그의 규칙을 따르는 것이 좋은 접근 방식이라고 생각합니다.
Kiril Aleksandrov

8
widget_frame필드 [ developer.android.com/reference/android/R.id.html#widget_frame] 로도 android.R.id.*필드. 이 분야에서 Google은 camel-case가 아닌 밑줄을 사용합니다. 그래서 camel-case 규칙에 대한 귀하의 결론이 옳습니다. ID 규칙에 대한 선택은 거짓 일 수 있습니다.
ahmed hamdy

4

밑줄이있는 소문자를 모두 사용하면 좋을 것 같아요.

이것 좀 봐 (다니엘이 대답 한 것에 추가)

  // Camel Case
    TextView tvUserName = (TextView) findViewById(R.id.tvUserName);
    // Small Caps and Underscores
    TextView tvUserName = (TextView) findViewById(R.id.tv_user_name);

내 경험상 xml의 낙타 케이스 규칙을 약간 혼동하는 경향이 있습니다. 왜냐하면 낙타 케이스를 사용하는 Java에 링크하면 (표준이기 때문에) 도플 갱어처럼 보입니다.


이것은 매우 주관적이며 문자열을 식별 할 수있는 것처럼 리소스 파일의 이름을 비슷하게 지정할 수없는 이유에 대해 Q에 대답하지 않습니다.
RichieHH 2014 년

3

xml 파일의 id에 대한 밑줄 규칙과 클래스 필드에 대한 camel case 규칙을 사용하면 모든 개발자가 xml ID와 클래스 필드를 구별하기 위해 더 나은 가시성을 제공 할 것이라고 생각합니다.



3
android:id="@+id/frag_account_button"
frag_account_button = ((ListView)view.findViewById(R.id.frag_account_button));

android:id="@+id/fragAccountButton"
fragAccountButton = ((ListView)view.findViewById(R.id.fragAccountButton));

우선 어느 것이 더 적절한 지 정의 할 수있는 특정 기준이 없지만 그것에 대해 나만의 생각이 있습니다. 내 생각은 XML id와 java 변수를 낙타 대소 문자 규칙과 똑같은 이름으로 유지하는 것이 합리적입니다.

  1. XML과 Java 모두에서 프로젝트를 검색하여 변수에 쉽게 도달 할 수 있습니다.

  2. butterKnife 라이브러리 정의

    @BindView (R.id.infoTextView) TextViewFont infoTextView;

이런 식으로 보관하는 것이 더 적절합니다.


3
Kotlin의 뷰 바인딩 은 butterKnife와 동일하게 반환하므로 snake_case를 모두 삭제합니다.
Rik Martins

1

xml 파일 이름 (드로어 블 폴더에서 사용되는 이름)은 xml에서 대문자로 된 파일 이름이 지원되지 않으므로 모두 밑줄 문자 _로 구분되어야합니다.


1
이것은 파일 이름에 관한 것이 아니며 일부 사람들은 낙타 대문자로 첫 글자를 대문자로 사용하지 않는 것을 선호합니다.
Jesper

IMO는 이상한 모순 된 문제입니다. 구별하기 위해 대소 문자를 구분할 수는 없지만 동일한 디렉토리에서 동일한 이름의 루트 구성 요소를 가진 리소스 파일을 금지하면 안됩니다.
RichieHH 2014 년

(Btw 그것은 파일 이름 대 리소스 ID에 관한 것입니다 : OP를 다시 확인하십시오)
RichieHH

0

안드로이드의 컴파일러가 당신이 말하는 낙타 케이스를 제한하고 있다면 (이상하게 보임), 확립 된 규칙을 고수해야합니다.

곡물에 반대하는 것은 불필요한 혼란을 야기 할뿐입니다. 가능한 모든 곳에서 일관되게 유지하십시오.


내가 말하려는 것을 오해했을 것입니다. 파일과 같은 리소스를 넣고 낙타 케이스로 작성하면 컴파일러가 불평합니다. 그러나 다른 경우는 XML 레이아웃 파일에 ID를 지정하는 경우입니다. 여기에 낙타 케이스 ID 이름을 배치 할 수 있으며 에뮬레이터가 제대로 작동합니다. 앞서 언급했듯이 Google 샘플은 모두 my_id_name 형식이지만 낙타 케이스 ID 이름을 사용하는 것과 관련된 다른 샘플이 많이 있습니다.
Juri
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.