หลักการตั้งชื่อสำหรับตัวแปร "number of foos" [ปิด]


90

สมมติว่าฉันต้องการเก็บจำนวนของวัตถุ foo ไว้ในตัวแปร

ไม่ใช่เจ้าของภาษาอังกฤษฉันมักจะสงสัยว่าชื่อที่ดีที่สุด (= สั้นและชัดเจนในทันที) สำหรับตัวแปรนั้นคืออะไร

foo_numเหรอ? num_fooเหรอ? no_fooเหรอ? foo_noเหรอ? หรืออย่างอื่น?

ชื่อเต็มควรเป็นnumber_of_foosแต่เป็นคำที่ละเอียดเกินไป

คุณชอบอะไรและเพราะอะไร


ฉันชอบคำตอบของ fooCount แต่ฉันไม่คิดว่า number_of_foos จะยาวเกินไป แต่ฉันคิดว่ามันขึ้นอยู่กับสิ่งที่ "foo" จริงๆ
โอกาส

และสิ่งที่คุณต้องการทำกับตัวแปร นิพจน์ทางคณิตศาสตร์ที่number_of_foosอยู่ในนั้นกลายเป็นเรื่องยุ่งยากอย่างรวดเร็ว
user7610

คำตอบ:


52

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

ฉันไปFOO_COUNTถ้าคุณต้องการจัดเก็บขั้นสุดท้ายและคงที่ (ถ้าคุณไม่จำเป็นต้องเปลี่ยน / ถ้าเป็นค่าคงที่) (ตัวพิมพ์ใหญ่ทั้งหมดสำหรับค่าคงที่!)

ฉันไปcountและเรียกมันว่าโดยถ้าคุณมีจริงๆที่จะเก็บไว้เป็นแอตทริบิวต์สำหรับการเรียนที่คุณทำซึ่งเป็นFoo.countFoo

อ่านง่ายสำหรับคุณและสำหรับทีมของคุณ!


foosCountเนื่องจากพหูพจน์ดีกว่าแทนเซต และมันควรจะเป็นชุดของสิ่งต่างๆ
Magne

แต่มันขึ้นอยู่กับ เสียงพหูพจน์ที่ดีสำหรับชื่อบางคนชอบgamesIncludedCountแต่เสียงเอกพจน์ที่ดีกว่าสำหรับชื่ออื่น ๆ gameCountเช่น
Magne

26

เนื่องจากตัวแปรเก็บการนับจำนวนของวัตถุ foo จึงfooCountได้รับการโหวตของฉัน


+1 สำหรับการเพิ่มเหตุผล (แม้ว่าการใช้ถ้อยคำจะค่อนข้างไม่สุภาพก็ตาม)

1
@delnan - ปกติฉันจะอธิบาย แต่ฉันรับสายจากโทรศัพท์
Justin Niessner

17

ในภาษาอังกฤษคำว่า 'number' และ 'count' สามารถทำหน้าที่เป็นคำนามหรือคำกริยาได้ แต่โดยทั่วไปแล้วจะเห็นว่า 'number' ใช้เป็นคำนามและ 'count' เป็นคำกริยา ดังนั้นคุณสามารถโต้แย้งว่า 'จำนวนฟูส' หรือ 'num_foo' ฟังดูคุ้นเคยมากกว่า 'จำนวนฟู' หรือ 'foo_count' มันฟังดูเป็นธรรมชาติมากขึ้นสำหรับฉันเมื่ออ้างถึงปริมาณที่ไม่เปลี่ยนแปลงตลอดเวลา คำว่า 'count' แม้จะใช้เป็นคำนาม แต่ก็บ่งบอกถึงคุณค่าที่เพิ่มขึ้นเมื่อเวลาผ่านไป

Ruby และ Python มีวิธีการ. count ซึ่งแสดงให้เห็นถึงคำที่ใช้เป็นคำกริยาแทนที่จะเป็นคำนาม ใน Ruby คุณอาจพูดว่า:

foos.count   # Count how many elements in the array 'foos'

ถึงกระนั้นสิ่งนี้จะส่งคืนค่าที่แสดงถึงจำนวน foos ซึ่งเป็นสิ่งที่คุณคาดหวังได้หากคุณอ้างถึงตัวแปรที่เรียกว่า 'foo_count' ดังนั้นในบางแง่ความจริงที่ว่า 'foos.count' และ 'foo_count' ดูคล้ายกันนั้นเป็นเรื่องที่ดี

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

num_string

เมื่อมองจากชื่อตัวแปรนั้นคุณเดาได้ไหมว่ามันหมายถึงอะไร มันเป็นจำนวนเต็มแทนปริมาณของสตริงหรือเป็นตัวแทนสตริงของตัวเลขหรือไม่?

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

BTW ฉันไม่ชอบ 'nr_foo' เพราะ 'nr' ไม่ได้แนะนำหรือฟังดูเหมือนคำว่า 'number' สำหรับฉันเลย ฟังดูเหมือน 'ner' หรืออาจหมายถึง 'not Rated' หรือ 'national rugby' :-) และฉันจะไม่กล้าพูดว่า fooCnt เป็นอย่างไร แค่ไม่.


15

เคอร์เนล Linux ใช้ "nr_foo" ซึ่งดีกว่า "no_foo" (ซึ่งดูเหมือนเป็นการปฏิเสธ) ตัวฉันเองมักจะใช้ "fooCount" หรือ "fooCnt" แต่บางครั้งก็ใช้ "numFoo" ด้วย ฉันไม่แน่ใจว่าทำไมฉันถึงเหม่อระหว่าง "fooCount" กับ "numFoo" เดาว่ามันขึ้นอยู่กับอารมณ์ของฉัน แต่คุณคุณควรจะสม่ำเสมอ (ตามที่ฉันควร);)


4
@rjack - "number" คลุมเครือ "count" จะเจาะจง ตัวอย่างเช่นตัวเลขอาจเป็นรหัส [ฉันคิดว่า McConnell ทำให้ประเด็นนี้เป็น "Code Complete" แต่ฉันไม่มีสำเนาด้วย] คำย่อของ "number" มีแนวโน้มที่จะเข้าใจได้มากกว่า (นอกเหนือจากตัวเขียนเคอร์เนลของ Linux) ได้แก่ "nFoo" และ "numFoo"
Andy Thomas

1
@Andy โทมัสแครมเมอ - ไม่ให้เกิดความสับสน IMHO: credit_card_nrเสียงเหมือน "หมายเลขบัตรเครดิต" ในขณะที่nr_credit_cardsเสียงเหมือน "จำนวนของบัตรเครดิต" credit_cards_countและก็สั้นกว่า ฟังดูเป็นธรรมชาติสำหรับฉัน (แต่ฉันอาจจะคิดผิดเพราะฉันไม่ใช่เจ้าของภาษาอังกฤษ)
Giacomo

1
@rjack มันจะเป็น credit_card_count อยู่ดีเนื่องจากโดยทั่วไปคุณจะไม่ใช้คำนามที่เป็นพหูพจน์เมื่อเป็นส่วนหนึ่งของคำประสม
siride

1
"nr" ของ Linux และคำตอบของคุณเป็นตัวอย่างที่ดีว่าคำว่า "number" สับสนแค่ไหน ใน Linux "nr" คือ (ด้วย?) ใช้เพื่อหมายถึงหมายเลขลำดับแทนการนับ เช่น__NR_openไม่ใช่จำนวนการopenเรียกระบบ แต่เป็นดัชนีของการเรียกระบบกล่าวคือค่าที่คุณส่งผ่านไปยังคำสั่งการเรียกระบบเพื่อระบุการเรียกระบบที่คุณกำลังเรียกใช้
Ruslan

1
เช่นเดียวกับในคำตอบของ @ Kal ฉันจะหลีกเลี่ยงเป็นการส่วนตัวfooCntเนื่องจากอาจตีความผิดได้
Ruben9922


5

ฉันเองจะไปtotal_foosหรือtotalFoosขึ้นอยู่กับมาตรฐานภาษา แสดงให้เห็นว่ามูลค่านั้นเป็นผลรวมสุดท้ายไม่ใช่แค่การนับที่รัน

นอกจากนี้ยังมีเหตุผลมากกว่าที่จะพูดว่า "ฉันมีลูกทั้งหมด 3 ตัว" มากกว่า "ฉันมีลูก 3 ตัว"

โดยรวมแล้วไม่ใช่เรื่องใหญ่ แต่ฉันมักจะใช้totalมากกว่าcount!


1
totalFoosอาจบ่งบอกได้ว่าเป็นชุด Foos ที่สมบูรณ์ (มันเกิดขึ้นในกรณีของฉันเมื่อฉันรวบรวมชุดต่างๆ) นอกจากนี้ยังเป็นการดีที่จะมีตัวระบุที่จุดเริ่มต้นของคำเพื่อให้อ่านได้ง่าย ดังนั้นฉันไปกับมันเป็นเด็ดขาดน้อยลงและเริ่มต้นด้วยfoosCount foo*คุณสามารถพูดว่า "ฉันมี foosCount 3"
Magne

3

ส่วนใหญ่fooCountเหมือนที่ทุกคนพูด บางครั้งมันก็เหมาะสมกว่าที่จะใช้foosโดยปกติแล้วเมื่อคุณไม่มีรายชื่อ foos จริง ๆ หรือไม่ได้แยกวัตถุ (เช่นsecondsสำหรับพิซซ่าคุณสามารถมีได้slicesเป็นต้น)

ใช้เฉพาะfoosเมื่อไม่มีโอกาสเกิดความสับสน - เมื่อเห็นได้ชัดว่าคุณไม่เคยมีรายชื่อ foos ในบริบทนี้


หากคุณใช้foosบางครั้งเพื่อหมายถึง "จำนวนfooวัตถุ" และเวลาอื่น ๆ เพื่อหมายถึง "การรวบรวมfooวัตถุฉันคิดว่าอาจทำให้เกิดความสับสนได้
James McNellis

slicesสำหรับฉันฟังดูเหมือนอาร์เรย์ของsliceวัตถุซึ่งเป็นส่วนหนึ่งของpizzaวัตถุ ฉันจะใช้sliceCountหรือnr_slicesหรืออะไรก็ตาม (ฉันยังไม่ได้ตัดสินใจ: D)
Giacomo

ใช่ใช้เฉพาะเมื่อไม่มีโอกาสเกิดภาวะ
คอนฟิกูเรชัน

2

ฉันใช้สำหรับจำนวนของบางอย่าง: somethingCount ( something_count )

ผมใช้หมายเลขลำดับของ somethings: somethingIndex ( something_index ) เพราะ "หมายเลข" เป็นคำที่คลุมเครือ ( มันหมายถึงปริมาณและหมายเลขลำดับ )



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