ควรจะมีการประกาศ“ ตัวบันทึกสุดท้ายแบบคงที่” ใน UPPER-CASE หรือไม่?


243

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

เช่น:

private static final Logger logger = Logger.getLogger(MyClass.class);

เพียงค้นหาgoogleหรือSOเพื่อ "static final logger" และคุณจะเห็นสิ่งนี้ด้วยตัวคุณเอง

เราควรใช้ LOGGER แทนหรือไม่


PMD หรือ Checkstyle เป็นความพยายามที่ไร้เดียงสาของผู้ใหญ่ก่อนที่จะเพิ่มความสามารถในการอ่าน แต่จะทำให้เกิดอันตรายมากกว่าผลประโยชน์ สไตล์ที่อ่านได้มากที่สุดสามารถเปลี่ยนเป็นกรณี ๆ ไปตามบริบท ดู Guava หรือ JDK src สิ่งเหล่านั้นไม่ได้เป็นไปตามแม่แบบสไตล์ที่เข้มงวด แต่ทำโดยผู้เชี่ยวชาญที่ไม่ต้องสงสัย ตัวอย่าง: DelegatedExecutorService @ docjar.com/html/api/java/util/concurrent/Executors.java.html
Daniel Hári

Sonar Rules ( rules.sonarsource.com/java/tag/convention/RSPEC-1312 ) ก็มีเช่นกันprivate static final Logger LOGGER = LoggerFactory.getLogger(Foo.class);
Kenston Choi

คำตอบ:


306

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

private static final Logger logger = Logger.getLogger(MyClass.class);

private static final double MY_CONSTANT = 0.0;

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

30
แต่ java.lang.String นั้นไม่เปลี่ยนรูปแบบและเป็นคลาสพิเศษต่อไป (ดู String.intern (), เอกสารเกี่ยวกับ Sring pool เป็นต้น)
Aleksander Adamowski

3
ไม่เปลี่ยนรูปหมายถึงสถานะของวัตถุไม่สามารถเปลี่ยนแปลงได้หลังจากการก่อสร้าง ดูโพสต์ของฉันด้านล่าง คนตัดไม้ไม่จำเป็นต้องปิดการใช้งาน
Jeffrey Blattman

4
หากใครบางคนยังคงสนใจปัญหานี้อยู่โปรดแบ่งปันแนวคิดที่github.com/checkstyle/checkstyle/issues/23เพื่อแยกแยะความต้องการของตัวพิมพ์ใหญ่และที่ไหน
Roman Ivanov

2
@Jeach ฉันไม่คิดว่าการเปลี่ยนแปลงไม่ได้เกี่ยวข้องกับการเปลี่ยนแปลงของรัฐเพียงอย่างเดียว นอกจากนี้ผู้ใช้คืออะไร ผู้ใช้ภายนอกที่รันโปรแกรมหรือไม่ คุณจะสร้างความแตกต่างระหว่างสถานะที่ถูกแก้ไขโดยผู้ใช้กดปุ่มและมันถูกแก้ไขโดยการจับเวลาในบางช่วงเวลาแบบสุ่ม? (ฉันไม่คิดอย่างนั้น)
Jeffrey Blattman

236

เพื่อเพิ่มคุณค่าให้กับคำตอบของ crunchdog, คู่มือการเขียนโค้ดสไตล์ Javaระบุสิ่งนี้ในวรรค 3.3 การตั้งชื่อฟิลด์

ชื่อของเขตข้อมูลที่ใช้เป็นค่าคงที่ควรเป็นตัวพิมพ์ใหญ่ทั้งหมดโดยใช้เครื่องหมายขีดล่างเพื่อแยกคำ ต่อไปนี้จะถือว่าเป็นค่าคงที่:

  1. static finalชนิดดั้งเดิมทั้งหมด(โปรดจำไว้ว่าเขตข้อมูลอินเทอร์เฟซทั้งหมดมีอยู่ในตัวstatic final)
  2. static finalประเภทการอ้างอิงวัตถุทั้งหมดที่ไม่ตามด้วย " ." (จุด)
  3. static finalอาร์เรย์ทั้งหมดที่ไม่เคยตามด้วย " [" (เปิดวงเล็บเหลี่ยม)

ตัวอย่าง:

MIN_VALUE, MAX_BUFFER_SIZE, OPTIONS_FILE_NAME

การปฏิบัติตามอนุสัญญาloggerนี้เป็นการstatic finalอ้างอิงวัตถุตามที่ระบุไว้ในจุดที่ 2 แต่เนื่องจากมีการติดตาม.ทุกครั้งที่คุณใช้ "" จึงไม่สามารถถือว่าเป็นค่าคงที่ได้ดังนั้นจึงควรเป็นตัวพิมพ์เล็ก


11
คำนิยามที่ดีที่สุดที่ฉันเคยเห็นในตอนนี้ เอกสารที่เชื่อมโยงดูเหมือนว่าจะย้ายไปอยู่ที่นี่คือการอัปเดตcs.bilgi.edu.tr/pages/standards_project/…
robert

15
ฉันไม่ได้จุด 2 ตัวอย่างของประเภทวัตถุที่ไม่เคยตามมาด้วยจุดคืออะไร ประเภทวัตถุทั้งหมดสืบทอดมาจากObjectและคุณสามารถเรียกวิธีการเช่น.equalsพวกเขา
dogbane

6
คุณพูดถูก และเมื่อดูค่าคงที่ Java บางตัวเช่น Boolean.TRUE, Boolean.FALSE, TimeUnit.MINUTES, String.CASE_INSENSITIVE_ORDER หรือ Collections.EMPTY_LIST พวกเขาอาจถูกติดตามด้วย.เช่นกัน
cbliard

5
@RomanIvanov ฉันพบมันอีกครั้งที่นี่: scribd.com/doc/15884743/Java-Coding-Style-by-Achut-Reddyเขียนโดย Achut Reddy, อัปเดตล่าสุด 30 พฤษภาคม 2000
cbliard

1
ฉันเชื่อว่าจุดประสงค์ของ 2 คือการกำหนดว่าเฉพาะชั้นเรียนที่มีความหมายที่จะนำมาเปรียบเทียบกับถือว่าเป็นค่าคงที่ คลาสไม่ได้มีไว้เพื่อให้ 'ใช้' ฉันรู้ว่าจะประจบประแจงเสมอเมื่อฉันเห็น SOME_CLASS.doStuff () มันเป็นเพียงการเข้ารหัสที่น่าเกลียด ปัญหาเดียวของเรื่องนี้คือในกรณีทั่วไปของวัตถุคงที่ (String เป็นตัวอย่างทั่วไป) ซึ่งมีความหมายเพียงเพื่อการเปรียบเทียบ แต่เพื่อหลีกเลี่ยงการตรวจสอบเป็นโมฆะการเข้ารหัสสไตล์ yoda ถูกใช้และทำให้เท่ากับ () ถูกเรียกบนค่าคงที่ ฉันคิดว่าฉันจะทำให้สิ่งนี้เป็นข้อแม้หนึ่งถึง 2
Robin

44

จากจาวาที่มีประสิทธิภาพ, 2nd ed.,

ข้อยกเว้นเพียงอย่างเดียวของกฎก่อนหน้านี้เกี่ยวข้องกับ "เขตข้อมูลคงที่" ซึ่งชื่อควรประกอบด้วยคำที่เป็นตัวพิมพ์ใหญ่หนึ่งคำหรือมากกว่าโดยคั่นด้วยอักขระขีดล่างเช่นค่าหรือ NEGATIVE_INFINITY เขตข้อมูลคงเป็นสนามสุดท้ายที่มีค่าคงที่จะไม่เปลี่ยนรูป หากฟิลด์สุดท้ายคงที่มีประเภทดั้งเดิมหรือประเภทอ้างอิงไม่เปลี่ยนรูป (รายการ 15) แสดงว่าเป็นฟิลด์คงที่ ตัวอย่างเช่นค่าคง enum เป็นเขตข้อมูลคงที่ ถ้าเขตข้อมูลสุดท้ายคงที่มีประเภทการอ้างอิงที่ไม่แน่นอนมันยังสามารถเป็นเขตคงที่ถ้าวัตถุอ้างอิงไม่เปลี่ยนรูป

โดยสรุปค่าคงที่ == เป็นค่าคงที่สุดท้ายบวกหากเป็นการอ้างอิง (เทียบกับประเภทแบบง่าย) ความไม่สามารถเปลี่ยนได้

กำลังดูตัวบันทึก slf4j, http://www.slf4j.org/api/org/slf4j/Logger.html

มันไม่เปลี่ยนรูป ในทางกลับกันตัวบันทึก JUL นั้นไม่แน่นอน ตัวบันทึก log4j นั้นยังไม่แน่นอน ดังนั้นเพื่อให้ถูกต้องหากคุณใช้ log4j หรือ JUL ควรเป็น "logger" และหากคุณใช้ slf4j ก็ควรเป็น LOGGER

โปรดทราบว่าหน้า slf4j javadocs ที่ลิงก์ด้านบนมีตัวอย่างที่ใช้ "logger" ไม่ใช่ "LOGGER"

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


2
จากเหตุผลนี้คำจำกัดความง่าย ๆ ของ checkstyle นั้นไม่เหมาะสมใช่ไหม
เบิร์ต

3
ฉันไม่รู้กฎของสไตล์การเช็ค ถ้าเป็นเพียงแค่ยืนยันว่าสุดท้ายคงที่ใด ๆ ที่ควรจะเป็นตัวพิมพ์ใหญ่ใช่แล้วมันผิด
Jeffrey Blattman

5
วิธีการว่าเป็นLogger อินเตอร์เฟซที่ ไม่เปลี่ยนรูป ? มีเพียงfinal class(เช่นStringหรือInteger) เท่านั้นที่สามารถรับประกันการเปลี่ยนไม่ได้ แม้ว่าคุณจะไม่พบการใช้งาน SLF4J ที่ไม่แน่นอนLoggerแต่ก็ไม่มีใครหยุดคุณจากการเขียนด้วยตนเอง
Costi Ciudatu

เนื่องจากวิธีการในอินเทอร์เฟซไม่อนุญาตให้กลายพันธุ์โดยเนื้อแท้ คุณพูดถูก แต่คุณสามารถใช้อินเทอร์เฟซเพื่อให้มีผลข้างเคียงที่เปลี่ยนแปลง
Jeffrey Blattman

ตรวจสอบกฎสไตล์ไม่เพียงพอที่จะเกี่ยวข้องกับการอ่าน ความสามารถในการอ่านไม่สามารถทำได้โดยการเทมเพลตสไตล์ความสามารถในการอ่านได้อาจแตกต่างกันไปแล้วแต่กรณีตามบริบท ดูรหัส JDK มันไม่ได้เป็นไปตามแม่แบบลักษณะใด ๆ และสร้างขึ้นโดยมืออาชีพที่แสดงบางอย่าง
Daniel Hári

37

ฉันชอบสิ่งที่ Google ทำ ( Google Java Style )

ค่าคงที่ทุกค่าเป็นเขตข้อมูลสุดท้ายคงที่ แต่ไม่ใช่เขตข้อมูลสุดท้ายคงที่ทั้งหมดเป็นค่าคงที่ ก่อนเลือกกรณีคงที่พิจารณาว่าสนามรู้สึกเหมือนเป็นค่าคงที่หรือไม่ ตัวอย่างเช่นหากสถานะใด ๆ ที่สังเกตได้ของอินสแตนซ์นั้นสามารถเปลี่ยนแปลงได้มันก็แทบจะไม่แน่นอน ตั้งใจจะไม่กลายพันธุ์วัตถุโดยทั่วไปไม่เพียงพอ

ตัวอย่าง:

// Constants
static final int NUMBER = 5;
static final ImmutableList<String> NAMES = ImmutableList.of("Ed", "Ann");
static final Joiner COMMA_JOINER = Joiner.on(',');  // because Joiner is immutable
static final SomeMutableType[] EMPTY_ARRAY = {};
enum SomeEnum { ENUM_CONSTANT }

// Not constants
static String nonFinal = "non-final";
final String nonStatic = "non-static";
static final Set<String> mutableCollection = new HashSet<String>();
static final ImmutableSet<SomeMutableType> mutableElements = ImmutableSet.of(mutable);
static final Logger logger = Logger.getLogger(MyClass.getName());
static final String[] nonEmptyArray = {"these", "can", "change"};

6
ฉันคิดว่าประโยคแรกจะรวมกันเป็นผลสำเร็จ: "ทุกค่าคงที่เป็นเขตข้อมูลสุดท้ายคงที่ แต่ไม่ใช่เขตข้อมูลสุดท้ายคงที่ทั้งหมดเป็นค่าคงที่" มันง่ายที่จะใช้การคิดเชิงกลและมีทุกฟิลด์สุดท้ายคงที่เป็นตัวพิมพ์ใหญ่ (และฉันได้ทำสิ่งนี้มาจนถึงตอนนี้) แต่นี่คือการพลาดความละเอียดอ่อนของภาษา
ayahuasca

ตามที่อ้างว่ามันเดือดลงไปถ้าสนาม "รู้สึก" เหมือนค่าคงที่ เราเป็นวิศวกรไม่ใช่จิตแพทย์
Jeffrey Blattman

"ลองคิดดูสิ ... ถ้ารู้สึกว่ามันคงที่" ความรู้สึกของใครบางคนไม่ควรเข้ามาในสาขาวิศวกรรม
Jeffrey Blattman

จากนั้นในรหัสของ Guava พวกเขามีมันเป็นprivate static final Logger logger = Logger.getLogger(Finalizer.class.getName());
Kenston Choi

10

หากคุณใช้เครื่องมืออัตโนมัติเพื่อตรวจสอบมาตรฐานการเข้ารหัสของคุณและมันละเมิดมาตรฐานดังกล่าวคุณควรแก้ไขหรือกำหนดมาตรฐาน หากคุณใช้มาตรฐานภายนอกแก้ไขรหัส

การประชุมใน Sun Java เป็นตัวพิมพ์ใหญ่สำหรับค่าคงที่สาธารณะ เห็นได้ชัดว่าคนตัดไม้ไม่คงที่ แต่หมายถึงสิ่งที่ไม่แน่นอน (มิฉะนั้นจะไม่มีวิธีการเรียกจุดด้วยความหวังว่าสิ่งที่จะเกิดขึ้น); ไม่มีมาตรฐานเฉพาะสำหรับฟิลด์สุดท้ายที่ไม่คงที่


10
ทำไมคุณถึงบอกว่าคนตัดไม้ไม่คงที่? ดูเหมือนว่าคงที่แน่นอน การบันทึกคือการสร้างเป็นผลข้างเคียงของการเรียกใช้วิธีการ แต่ไม่เปลี่ยนสถานะที่สังเกตได้ ฉันพลาดอะไรไปหรือเปล่า?
KLE

ตรวจสอบ API มันมีวิธีการเพิ่ม / รับคู่ แต่คุณให้เหตุผลว่ามีข้อบกพร่องอยู่ดี การบันทึกสามารถสังเกตได้ (มิฉะนั้นประเด็นคืออะไร)
Tom Hawtin - tackline

3
ถ้ามันเป็น StringBuilder มากกว่าคนตัดไม้มันอาจจะไม่แน่นอนมากกว่าแน่นอน แม้สำหรับคนตัดไม้วิธีการเช่น Logger.setLevel () จะกลายพันธุ์ผู้รับอย่างสังเกตได้ โดยทั่วไปจะเป็นตัวพิมพ์ใหญ่สำหรับค่าคงที่เหล่านั้นซึ่งภาษาจะถือว่าเป็นค่าคงที่และจะอินไลน์
Pete Kirkham

5
ตัวบันทึกไม่ใช่ค่าคงที่เนื่องจากเป็นการอ้างอิงไปยังวัตถุ ค่าคงที่คือค่าที่ไม่สามารถเปลี่ยนแปลงได้ การอ้างอิงวัตถุถือเป็นที่สิ้นสุด (ดังนั้นการอ้างอิงถึงมันไม่สามารถเปลี่ยนแปลงได้เช่นสลับกับสิ่งอื่นหรือตั้งค่าเป็นโมฆะ) แต่วัตถุนั้นสามารถทำได้
Spoike

1
@JeffreyBlattman ฉันไม่เห็นด้วยที่การอ้างอิงขั้นสุดท้ายทั้งหมดควรเป็นตัวพิมพ์ใหญ่ แต่คุณมีอิสระที่จะนำมาตรฐานการเข้ารหัสใด ๆ ที่คุณต้องการ ฉันขอโทษที่คุณพบความแตกต่างระหว่าง 'วัตถุที่ไม่แน่นอน' และ 'วัตถุที่แสดงถึงสิ่งที่ไม่แน่นอน' ทำให้เกิดความสับสน ตัวอย่างหนึ่งอาจเป็นหมายเลขบัญชีสำรองของคุณซึ่งตัวมันเองไม่เปลี่ยนแปลง แต่ถูกใช้เพื่อเข้าถึงยอดคงเหลือผันแปร ค้นหาความแตกต่างระหว่างตัวบ่งชี้และนัยสำคัญสำหรับรายละเอียดเพิ่มเติมหรือการแนะนำให้รู้จักกับ Monads ของ Leibnitz ว่าสิ่งที่ไม่เปลี่ยนรูปนั้นสามารถเป็นตัวแทนของความผันแปรได้อย่างไร
Pete Kirkham

7

หากคุณทำสิ่งนี้กับ Google คุณอาจพบว่าในบางกรณีตัวบันทึกไม่ได้ถูกกำหนดให้เป็นแบบสแตติก เพิ่ม copy-n-paste แบบย่อลงในส่วนนี้และสิ่งนี้อาจอธิบายได้

เราใช้ LOGGERในทุกรหัสของเราและสิ่งนี้สอดคล้องกับแบบแผนการตั้งชื่อของเรา (และ CheckStyle ของเรามีความสุขกับมัน)


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

    // private static final Logger LOGGER = Logger.getLogger(${enclosing_type}.class);

คนตัดไม้ออกความเห็นเป็นครั้งแรกที่เราไม่ต้องการมัน แต่ถ้าเราต้องการมันในภายหลังเราแค่ไม่ใส่คอมมัน

จากนั้นในรหัสเราใช้เทมเพลตรหัสที่คาดว่าจะมีคนตัดไม้นี้ ตัวอย่างที่มีเทมเพลต try-catch:

    try {
      ${cursor} or some other template
    } catch (Exception t) {
      LOGGER.error("${methodName} ${method parameters}", t);
    }

เรามีเทมเพลตอีกเล็กน้อยที่ใช้งาน

การประชุมที่เข้มงวดทำให้เรามีประสิทธิผลและเชื่อมโยงกับเทมเพลตโค้ดมากขึ้น


5
การจับ Throwable นั้นเป็นแนวปฏิบัติที่ไม่ดีเว้นแต่คุณจะบันทึกและทำใหม่ ข้อควรจำข้อผิดพลาด: OutOfMemeoryError ฯลฯ การยกเว้นเหตุการณ์ไม่ปลอดภัยนักที่จะถูกดักจับและจัดการด้วยตนเองในแอปพลิเคชันแบบมัลติเธรด
m_vitaly

2
ไวยากรณ์ของ Eclipse คือ: Logger.getLogger ($ {enclosing_type} .class);
dogbane

@ fahdshariff ขอบคุณสำหรับไวยากรณ์ที่แม่นยำ ฉันปรับปรุงคำตอบของฉัน
KLE

หาก "อนุสัญญาที่เข้มงวด" ของ CheckStyle หรือ PMD ช่วยด้วยเหตุใดแหล่งที่มาของ Guava และ JDK จึงไม่ใช้สไตล์ทั่วไปใด ๆ ตัวอย่างเช่นแหล่งที่มาของพวกเขามีบล็อกแบบอินไลน์มากมายที่จำเป็น ความสามารถในการอ่านขึ้นอยู่กับบริบทดังนั้นการใช้ข้อกำหนดการจัดแต่งทรงผมที่เข้มงวดสำหรับทุกอย่างจะทำลายการตัดสินใจตามบริบทดังนั้นจึงลดความสามารถในการอ่าน
Daniel Hári

6

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


4

อย่าลืมว่า PMD จะเคารพความคิดเห็นด้วย

// NOPMD

ในนั้น. นี่จะทำให้ PMD ข้ามสายจากการตรวจสอบซึ่งจะช่วยให้คุณสามารถเลือกรูปแบบที่คุณต้องการ


6
หรือ dont ใช้ PMD พวกเขาอยู่เสมอผิดและรหัสของคุณเป็นที่สมบูรณ์แบบ
IAdapter

1
หากคุณจำเป็นต้องยกเว้นการตรวจสอบทุกครั้งการตรวจสอบก็ไม่สมเหตุสมผล
keiki

ไม่สามารถตกลงเพิ่มเติม - อย่างไรก็ตาม ... มีประโยชน์ที่จะทราบความคิดเห็นที่ไม่รวม
Fortyrunner

3

ค่าคงที่มักจะเป็นตัวพิมพ์ใหญ่

อย่างไรก็ตาม Loggers ไม่ควรอยู่นิ่ง ๆ แต่มองหา "ใหม่" ของคลาสที่มีอยู่ทุกครั้งหากใช้ซุ้ม slf4j วิธีนี้จะช่วยหลีกเลี่ยงปัญหา classloader ที่น่ารังเกียจในเว็บคอนเทนเนอร์โดยเฉพาะและอนุญาตให้เฟรมเวิร์กตัวบันทึกทำสิ่งพิเศษขึ้นอยู่กับบริบทการเรียกใช้


2

ฉันชอบ 'คนตัดไม้' เช่นตัวพิมพ์เล็ก เหตุผลไม่ใช่ว่าเป็นค่าคงที่หรือไม่คงที่ (ไม่แน่นอนหรือไม่เปลี่ยนรูป) ถ้าเราใช้เหตุผลนั้นเราต้องเปลี่ยนชื่อตัวแปรถ้าเราเปลี่ยนเฟรมเวิร์กการบันทึก (หรือถ้าเฟรมเวิร์กเปลี่ยนความไม่แน่นอนของตัวบันทึก)

สำหรับฉันเหตุผลอื่นมีความสำคัญมากกว่า

  1. คนตัดไม้เป็นวัตถุเงาในชั้นเรียนและไม่ควรโดดเด่นมากเพราะไม่ได้ใช้ตรรกะหลัก ถ้าเราใช้ 'LOGGER' มันเป็นสิ่งที่ดึงดูดสายตาในโค้ดที่ดึงดูดความสนใจมากเกินไป

  2. บางครั้งตัวบันทึกจะถูกประกาศในระดับอินสแตนซ์ (เช่นไม่ใช่แบบคงที่) และแม้กระทั่งถูกฉีดเป็นการพึ่งพา ฉันไม่ต้องการเปลี่ยนรหัสของฉันถ้าฉันตัดสินใจที่จะเปลี่ยนวิธีที่ฉันได้รับคนตัดไม้ ความเสถียรของรหัส wrt การเปลี่ยนแปลงนี้ (สมมุติในหลาย ๆ กรณี) เป็นอีกเหตุผลหนึ่งที่ฉันชอบตัวพิมพ์เล็ก


1

หากมาตรฐานการเข้ารหัสของคุณ - ถ้าคุณมี - บอกว่าควรเป็นตัวพิมพ์ใหญ่ใช่แล้ว

ฉันไม่เห็นเหตุผลที่เข้มงวดในทางใดทางหนึ่ง ฉันคิดว่ามันขึ้นอยู่กับความชอบส่วนตัวของคุณ มาตรฐานการเข้ารหัส บริษัท ของคุณ

BTW: ฉันชอบ "LOGGER" ;-)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.