หลักการตั้งชื่อรหัส Android: ตัวพิมพ์เล็กที่มีขีดล่างเทียบกับตัวอักษรอูฐ


90

ฉันกำลังเขียนโปรแกรมแอปพลิเคชันสำหรับ Android ตอนนี้สิ่งที่ฉันพบคือคุณไม่สามารถวางวัตถุทรัพยากรพูดรูปภาพในโฟลเดอร์ที่วาดได้และตั้งชื่อเป็น "myTestImage.jpg" สิ่งนี้จะทำให้คุณมีข้อผิดพลาดของคอมไพเลอร์เนื่องจากไม่อนุญาตให้ใช้ไวยากรณ์กรณีอูฐดังนั้นคุณต้องเปลี่ยนชื่อเป็น "my_test_image.jpg"

แต่รหัสที่คุณกำหนดในไฟล์ XML ล่ะ สมมติว่าคุณมีคำจำกัดความดังต่อไปนี้

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

นี่เป็นคำจำกัดความที่ถูกต้องรวบรวมและใช้งานได้ดีกับโปรแกรมจำลอง Android ของฉันแม้ว่า - อย่างที่คุณเห็น - ฉันกำลังระบุรหัสในไวยากรณ์กรณีอูฐ

ตอนนี้ตัวอย่าง Android จะใช้ตัวพิมพ์เล็กและขีดล่างเสมอ นี่เป็นเพียงหลักการตั้งชื่อเพื่อใช้ตัวพิมพ์เล็กและขีดล่างสำหรับรหัสหรืออาจทำให้เกิดปัญหากับอุปกรณ์จริงหรือไม่

ขอบคุณ

คำตอบ:


87

อุปกรณ์จะไม่บ่นหากคุณใช้ชื่อรหัสเคสอูฐ สำหรับแอปพลิเคชันแรกของฉันฉันเขียนรหัสทั้งหมดในกรณีอูฐเพราะฉันคิดว่ามันดูดีกว่าในโค้ด 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 ไม่สอดคล้องกันในตัวอย่าง บางครั้งพวกเขาใช้ตัวพิมพ์เล็กทั้งหมดบางครั้งพวกเขาแทรกขีดล่างและบางครั้งก็ใช้ตัวพิมพ์เล็กอูฐ


19
ใช่นั่นคือปัญหาของฉัน พวกเขาบังคับให้คุณใช้รูปแบบการตั้งชื่อที่ขีดเส้นใต้สำหรับเลย์เอาต์ในขณะที่คุณสามารถใช้ตัวอักษรอูฐหรือขีดล่างสำหรับรหัสอ้างอิงการควบคุม / วิดเจ็ตภายในข้อกำหนดเค้าโครง XML Google ควรกำหนดมาตรฐานบางอย่างที่นี่จริงๆ (ถ้ายังไม่ได้ทำอย่างน้อยฉันก็ไม่พบอะไรเลย) ดังนั้นการดำเนินการทางเดียวจึงเป็นวิธีที่ดีที่สุดที่จะสอดคล้องกันตลอดทั้งแอปพลิเคชันไม่ว่าคุณจะอ้างอิงเค้าโครงหรือเขตข้อมูลที่อ้างอิง ID
Juri

เพียงเพื่อความอยากรู้: คุณมีลิงก์ที่ Google ไม่สอดคล้องกันหรือไม่ซึ่งหมายความว่าพวกเขาใช้สัญกรณ์กรณีอูฐสำหรับรหัสหรือไม่
Juri

6
เพื่อสร้างความสับสนสิ่งที่เพิ่มเติมชื่อสไตล์ (ซึ่งเป็นเหมือนรหัสสำหรับรูปแบบ) ในโครงการแม่แบบใช้ PascalCase เช่นและAppBaseTheme AppTheme
Edward Brey

4
โดยทั่วไปแล้ววิธีการขีดล่างจะถือว่าอ่านได้น้อยกว่ามากในทีมที่ฉันมีส่วนเกี่ยวข้องข้อ จำกัด ที่ค่อนข้างแปลกของชื่อไฟล์ทรัพยากรที่ไม่ได้รับอนุญาตให้อยู่ในกรณีอูฐไม่ควรทำให้ความคิดของคุณเสียหายสำหรับอินเทอร์เฟซ Java ที่เหลือ - camelCase คือ ฝังแน่นและฉันไม่คิดว่าจะมีใครขอบคุณสำหรับการกำหนดรูปแบบใหม่ "_" ในรูปแบบการตั้งชื่อ
RichieHH

3
@RichardRiley ฉันคิดว่ามันน่าสนใจเช่นเดียวกับการขีดเส้นใต้ว่าขอบเขตของคำนั้นถูกกำหนดอย่างถูกต้องในขณะที่กรณีอูฐมันถูกรวมเข้าด้วยกันดังนั้นฉันจึงมีเวลาที่ง่ายกว่าในการแยกวิเคราะห์ชื่อที่คั่นด้วยขีดล่างมากกว่าชื่ออูฐ
JAB

13

หากคุณดูที่android.R.id.*ทุ่งนาคุณจะสังเกตเห็นว่าทั้งหมดอยู่ในกรณีอูฐ ดังนั้นหากรหัส Android เขียนด้วยตัวอักษรอูฐฉันเดาว่าเราต้องทำตามอนุสัญญานี้ :)


พวกเขาอยู่ในกล่องอูฐเพราะมันถูกสร้างขึ้นใน camelCase สิ่งนี้ไม่ได้กำหนดรูปแบบการเข้ารหัสใด ๆ สำหรับชุมชนเป็นส่วนใหญ่และสิ่งนี้ไม่ได้เชื่อมโยงกับรูปแบบการตั้งชื่อของไฟล์ทรัพยากรเทียบกับสตริง ID ซึ่งเป็นสิ่งที่ผู้โพสต์ดั้งเดิมกำลังถามถึง
RichieHH

3
ใช่มันถูกสร้างขึ้นในกล่องอูฐ แต่รหัสเหล่านี้มาจาก Android API ดังนั้นหากผู้สร้าง API ใช้กรณีอูฐฉันเดาว่าเป็นแนวทางที่ดีในการปฏิบัติตามแบบแผนของเขา
Kiril Aleksandrov

8
มีwidget_frameฟิลด์ [ developer.android.com/reference/android/R.id.html#widget_frame]ใน android.R.id.*ฟิลด์ด้วย ในช่องนี้ Google ใช้ขีดล่างไม่ใช่กรณีอูฐดังนั้นข้อสรุปของคุณเกี่ยวกับการประชุมกรณีอูฐจึงถูกต้องสำหรับการประชุม 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 ซึ่งใช้กรณีอูฐด้วย (เนื่องจากเป็นมาตรฐาน) ดูเหมือนว่าจะเป็น doppleganger


นี่เป็นเรื่องส่วนตัวมากและไม่ได้ตอบคำถามเกี่ยวกับสาเหตุที่คุณไม่สามารถตั้งชื่อไฟล์ทรัพยากรในทำนองเดียวกันได้เนื่องจากคุณสามารถ ID สตริงได้
RichieHH

3

ฉันคิดว่าถ้าเราใช้รูปแบบขีดล่างสำหรับ id ในไฟล์ xml และการประชุมกรณีอูฐสำหรับฟิลด์คลาสมันจะให้การมองเห็นที่ดีขึ้นสำหรับนักพัฒนาทุกคนเพื่อแยกความแตกต่างระหว่างรหัส xml และฟิลด์คลาส



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 (ซึ่งเป็นสิ่งที่ใช้ในโฟลเดอร์ drawable) ต้องเป็นตัวพิมพ์เล็กทั้งหมดที่คั่นด้วยอักขระขีดล่าง _ เนื่องจากไม่รองรับชื่อไฟล์ที่เป็นตัวพิมพ์ใหญ่ใน xml


1
สิ่งนี้ไม่เกี่ยวกับชื่อไฟล์และนอกจากนี้บางคนไม่ต้องการใช้ตัวพิมพ์ใหญ่ตัวพิมพ์ใหญ่เมื่อใส่ปลอกอูฐ
Jesper

มันเป็นปัญหาที่แปลกประหลาด IMO คุณไม่สามารถแยกความไวของตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ได้ แต่ทำไมไม่เพียงแค่ห้ามไฟล์ทรัพยากรที่มีส่วนประกอบรูทชื่อเดียวกันในไดเรกทอรีเดียวกัน
RichieHH

(Btw มันเกี่ยวกับชื่อไฟล์เทียบกับรหัสทรัพยากร: ตรวจสอบ OP อีกครั้ง)
RichieHH

0

หากคอมไพเลอร์ของ Android ทำตามที่คุณบอกว่า จำกัด กรณีอูฐอย่างแท้จริง (ซึ่งดูเหมือนจะค่อนข้างแปลก) คุณควรยึดตามข้อตกลงที่กำหนด

การต่อต้านเมล็ดพืชจะทำให้เกิดความสับสนโดยไม่จำเป็นเท่านั้น ทำให้สิ่งต่างๆสอดคล้องกันในทุกที่ที่ทำได้


คุณคงเข้าใจผิดว่าฉันพยายามจะพูดอะไร คอมไพเลอร์จะบ่นถ้าคุณใส่ทรัพยากรเช่นไฟล์และเขียนว่าอูฐ อย่างไรก็ตามอีกกรณีคือเมื่อคุณระบุ ID ในไฟล์เลย์เอาต์ XML คุณมีความเป็นไปได้ที่จะใส่ชื่อรหัสเคสอูฐและตัวจำลองก็ใช้งานได้ดี ตอนนี้ที่ฉันพูดไปตัวอย่าง Google ทั้งหมดอยู่ในรูปแบบ my_id_name แต่มีตัวอย่างอื่น ๆ อีกมากมายที่มีชื่อรหัสกรณีอูฐ ...
Juri
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.