การใช้อักขระ Unicode ในชื่อตัวแปรนั้นดีหรือไม่? [ปิด]


82

ฉันเพิ่งพยายามใช้อัลกอริทึมการจัดอันดับ AllegSkill เพื่อ Python 3

นี่คือลักษณะทางคณิตศาสตร์:

ข้อความแสดงแทน

ไม่มีจริงๆ.

นี่คือสิ่งที่ฉันเขียน:

t = (µw-µl)/c  # those are used in
e = ε/c        # multiple places.
σw_new = (σw**2 * (1 - (σw**2)/(c**2)*Wwin(t, e)) + γ**2)**.5

จริง ๆ แล้วฉันคิดว่ามันน่าเสียดายที่ Python 3 จะไม่ยอมรับหรือ²เป็นชื่อตัวแปร

>>> √ = lambda x: x**.5
  File "<stdin>", line 1
    √ = lambda x: x**.5
      ^
SyntaxError: invalid character in identifier

ฉันอยู่ในใจฉันไหม? ฉันควรใช้เวอร์ชัน ASCII เท่านั้นหรือไม่? ทำไม? ASCII รุ่นเดียวที่กล่าวมาข้างต้นจะไม่สามารถตรวจสอบความถูกต้องของการเทียบเท่ากับสูตรได้หรือไม่

ในใจคุณฉันเข้าใจว่าร่ายมนตร์ Unicode มีลักษณะเหมือนกันมากและบางอย่างเช่น (หรือว่า▗▖) หรือ╦แค่ไม่สามารถเข้าใจได้ในการเขียนโค้ด อย่างไรก็ตามนี่เป็นเรื่องยากสำหรับคณิตศาสตร์หรือร่ายมนตร์ลูกศร


ตามคำขอรุ่น ASCII เท่านั้นจะเป็นบางสิ่งบางอย่างตามสายของ:

winner_sigma_new = ( winner_sigma ** 2 *
                    ( 1 -
                     ( winner_sigma ** 2 -
                       general_uncertainty ** 2
                     ) * Wwin(t,e)
                    ) + dynamics ** 2
                   )**.5

... ต่ออัลกอริทึมแต่ละขั้นตอน


58
นั่นเป็นบ้าไม่สามารถอ่านได้อย่างสมบูรณ์และเด็ดขาด
Dominique McDonnell

2
พูดคุยเกี่ยวกับ unicode ... codinghorror.com/blog/2008/03/i-entity-unicode.html
CoderHawk

3
ฉันคิดว่ามันเป็นสิ่งที่ดีมากที่ Python ไม่ยอมรับการดำเนินการทางคณิตศาสตร์เป็นตัวแปร เครื่องหมายรากที่สองควรแสดงถึงการดำเนินการรับกำลังสองและไม่ควรเป็นตัวแปร
David Thornley

4
@ David ไม่มีความแตกต่างดังกล่าวใน Python อันที่จริงsqrt = lambda x: x**.5ได้รับฉันฟังก์ชัน (อย่างแม่นยำมากขึ้นเป็น sqrt(2) => 1.41421356237callable):
badp

4
OutputStream.🚽;

คำตอบ:


54

ฉันรู้สึกอย่างยิ่งว่าเพียงแค่แทนที่σด้วยsหรือsigmaจะโง่ติดกับสมองตาย

ศักยภาพที่จะได้รับคืออะไร? เรามาดู ...

  • มันปรับปรุงการอ่านหรือไม่? ไม่น้อยเลย ถ้าเป็นเช่นนั้นสูตรดั้งเดิมจะต้องใช้ตัวอักษรละตินอย่างไม่ต้องสงสัย

  • มันปรับปรุงการเขียนได้หรือไม่ ในการเหลือบมองครั้งแรกใช่ แต่ในวันที่สองไม่มี เพราะสูตรนี้จะไม่มีการเปลี่ยนแปลง (เช่นกัน“ ไม่เคย”) โดยทั่วไปจะไม่จำเป็นต้องเปลี่ยนรหัสหรือขยายโดยใช้ตัวแปรเหล่านี้ ดังนั้นความสามารถในการเขียนได้คือ - แค่ครั้งเดียวเท่านั้น - ไม่ใช่ปัญหา

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

แต่กรีกไม่ใช่ปัญหา ตัวระบุที่ไม่ได้สื่อความหมายหนึ่งตัวอักษรคือ

ดังนั้นทั้งให้สัญกรณ์เดิม ... หลังจากที่ทุกคนถ้าภาษาการเขียนโปรแกรมไม่สนับสนุน Unicode ในตัวบ่งชี้เพื่อให้ไม่มีอุปสรรคทางเทคนิค หรือใช้ตัวระบุที่มีความหมาย อย่าเพียงแทนที่ร่ายมนตร์ภาษากรีกด้วยร่ายมนตร์ภาษาละติน หรือภาษาอาหรับหรือภาษาฮินดี


3
เครื่องมือบางอย่างไม่สามารถอ่านอักขระ Unicode ได้แม้ว่าภาษาการเขียนโปรแกรมรองรับการใช้งาน ฉันจะไม่เรียกมันว่าเป็นการตัดสินใจที่ไม่ต้องใช้สมองในการใช้ชื่อตัวแปรที่ไม่ใช่ยูนิโค้ด
Gary S. Weaver

44
@ แกรี่“ เครื่องมือบางอย่างไม่สามารถอ่าน Unicode ได้” - เปลี่ยนเครื่องมือพวกมันอึ ขออภัยปี 2013 และฉันไม่มีความเห็นอกเห็นใจและความอดทนน้อยลงสำหรับเครื่องมือดังกล่าว รองรับเครื่องมือที่ชำรุดป้องกันความคืบหน้า
Konrad Rudolph

3
@ KonradRudolph จุดของฉันคือเครื่องมือบางอย่างไม่สนับสนุน Unicode ไม่ว่าด้วยเหตุผลใดก็ตามดังนั้น "การเปลี่ยนเครื่องมือ" จึงไม่ใช่คำตอบที่ถูกต้องเสมอไป ฉันยอมรับว่า Unicode ดีและเครื่องมือควรเข้าใจ แต่นั่นไม่ใช่ตัวเลือกเสมอไป

3
@ จอห์นฉันยืนยันว่า "เปลี่ยนเครื่องมือ" เป็นคำตอบที่เหมาะสม ตัวอย่างของคุณแสดงให้เห็นถึงกรณีเช่นนี้: .propertiesไฟล์Java เป็นเรื่องง่ายที่จะแยกวิเคราะห์ หากคุณจริงๆที่เกิดขึ้นในการทำงานกับโซ่เครื่องมือที่ได้รับการสนับสนุนโดย.propertiesไฟล์ที่ไม่สนับสนุน Unicode ก็ทั้งหมดที่เหมาะสมที่จะลดลงกล่าวว่าโซ่เครื่องมือ (และแทนที่มันด้วยตัวเองหาทางเลือกหรือในกรณีที่เลวร้ายที่สุดคณะกรรมการหนึ่ง ) แน่นอนว่าสิ่งนี้ใช้ไม่ได้กับระบบเดิม แต่สำหรับระบบเดิมไม่มีข้อควรพิจารณาสำหรับแนวทางปฏิบัติที่ดีที่สุดเท่าที่เคยมีมา
Konrad Rudolph

8
ปัญหา "การแลกเปลี่ยน" ที่คุณพูดถึงดูเหมือนจะเป็นปัญหาหลักของนักพัฒนา Java และ Windows โลกของ Linux ส่วนใหญ่สร้างมาตรฐานบน UTF-8 ในช่วงทศวรรษที่ผ่านมา มันเป็นปัญหาของ toolchain แน่นอน หยุดใช้เครื่องมือที่ไม่ดี
รวย remer

33

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

แล้วมีทางเลือกอะไรและมีสิทธิ์สูงสุด//µ = uแล้วเขียนทุกอย่างใน ascii?


14
โดยวิธีการที่ไม่ถือว่าแป้นพิมพ์ทั้งหมดเปิดเผยคีย์การเข้ารหัสมาตรฐานอย่างสะดวกสบาย รูปแบบแป้นพิมพ์ของฉันต้องใช้สามปุ่มในการพิมพ์{และ}(ซึ่งล้มเหลวใน ttys btw) และขาดไปอย่างสมบูรณ์`และ~... ทำไม Bash script ใดไม่ต้องการให้ฉันใช้ผังอักขระถ้าฉันไม่ได้ใช้ keymap ที่กำหนดเอง? :)
badp

4
ฉันติดตั้งแป้นพิมพ์ภาษากรีกพร้อมกับแป้นพิมพ์ภาษาพื้นเมืองของฉันและสามารถสลับระหว่างแป้นพิมพ์เหล่านั้นด้วยการกดแป้นเดียว สิ่งนี้มีประโยชน์เมื่อพูดถึงคณิตศาสตร์ใน IM / อีเมล ... และฉันคิดว่าจะใช้มันในสคริปต์หลาม
liori

18
ฮึ. เพียงแค่แทนที่ตัวอักษรกรีกด้วยตัวอักษรธรรมดา? ไม่ได้กำไร แต่อย่างใด ใช้ชื่อตัวแปรที่มีความหมายหรือใช้ชื่อจากกระดาษ ไม่มีเหตุผลที่จะได้รับความคิดสร้างสรรค์
Konrad Rudolph

12
อย่ามั่ว µ และμ ...
endolith

4
บรรณาธิการที่เหมาะสมมีวิธีการป้อนข้อมูลที่เหมาะสมสำหรับ Unicode ซึ่งทำให้ง่ายต่อการแก้ไขรหัสเช่นนี้ ยกตัวอย่างเช่น Emacs สนับสนุน (เหนือสิ่งอื่น) ด้วยและTeX มันเป็นสิ่งที่ดูเหมือน จะช่วยให้คุณพิมพ์สำหรับและสำหรับ จะช่วยให้คุณรวมกันบางอย่างเช่นสำหรับและสำหรับ ตามกฎทั่วไปแล้วฉันไม่ต้องกังวลกับการรองรับโปรแกรมเมอร์ที่ใช้โปรแกรมแก้ไขที่มีความสามารถน้อยกว่า Emacs rfc1345TeX\sigmaσ\torfc1345&s*σ&->
Tikhon Jelvis

31

อาร์กิวเมนต์นี้อนุมานว่าคุณไม่มีปัญหากับการพิมพ์ Unicode หรืออ่านตัวอักษรกรีก

นี่คือเหตุผล: คุณต้องการ pi หรือ circular_ratio หรือไม่

ในกรณีนี้ฉันชอบ pi ถึง circular_ratio เพราะฉันได้เรียนรู้เกี่ยวกับ pi ตั้งแต่ฉันอยู่ในโรงเรียนประถมศึกษาและฉันสามารถคาดหวังได้ว่าคำนิยามของ pi นั้นฝังแน่นอยู่กับโปรแกรมเมอร์ทุกคนที่ให้ความสำคัญกับเกลือของเขา ดังนั้นฉันจะไม่สนใจการพิมพ์πเพื่อหมายถึง circular_ratio

อย่างไรก็ตามสิ่งที่เกี่ยวกับ

winner_sigma_new = ( winner_sigma ** 2 *
                    ( 1 -
                     ( winner_sigma ** 2 -
                       general_uncertainty ** 2
                     ) * Wwin(t,e)
                    ) + dynamics ** 2
                   )**.5

หรือ

σw_new = (σw**2 * (1 - (σw**2)/(c**2)*Wwin(t, e)) + γ**2)**.5

สำหรับฉันทั้งสองรุ่นมีความทึบแสงเท่า ๆ กันเหมือนpiหรือπเป็นยกเว้นว่าฉันไม่ได้เรียนรู้สูตรนี้ในโรงเรียนเกรด winner_sigmaและWwinไม่มีความหมายสำหรับฉันหรือกับคนอื่นที่อ่านรหัสและการใช้ไม่σwได้ทำให้ดีขึ้น

ดังนั้นการใช้ชื่อที่สื่อความหมายเช่นtotal_score, winning_ratioฯลฯ จะเพิ่มการอ่านดีกว่าโดยใช้ชื่อ ASCII ที่เพียงออกเสียงตัวอักษรกรีก ปัญหาไม่ใช่ว่าฉันไม่สามารถอ่านตัวอักษรกรีก แต่ฉันไม่สามารถเชื่อมโยงอักขระ (กรีกหรือไม่) กับ "ความหมาย" ของตัวแปร

คุณเข้าใจปัญหาอย่างแน่นอนเมื่อคุณแสดงความคิดเห็น: You should have seen the paper. It's just eight pages.... ปัญหาคือถ้าคุณตั้งชื่อตัวแปรของคุณบนกระดาษซึ่งเลือกชื่อตัวอักษรเดียวสำหรับความรัดกุมแทนที่จะอ่านง่าย (ไม่ว่าจะเป็นภาษากรีก) แล้วผู้คนจะต้องอ่านกระดาษเพื่อเชื่อมโยงตัวอักษรกับ "ความหมาย"; นี่หมายความว่าคุณกำลังวางสิ่งกีดขวางเทียมเพื่อให้ผู้คนสามารถเข้าใจโค้ดของคุณและนั่นก็เป็นสิ่งที่เลวร้ายอยู่เสมอ

แม้ว่าคุณจะอยู่ในโลกที่มี แต่เพียง ASCII ทั้งคู่a * b / 2และalpha * beta / 2มีการแสดงผลที่ทึบแสงเท่ากันheight * base / 2สูตรพื้นที่สามเหลี่ยม ความไม่สามารถอ่านได้ของการใช้ตัวแปรตัวอักษรเดี่ยวจะเพิ่มขึ้นแบบทวีคูณเนื่องจากสูตรมีความซับซ้อนมากขึ้นและสูตร AllegSkill นั้นไม่ใช่สูตรที่ไม่สำคัญ

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

เมื่ออยู่ในชั้นประถมศึกษาปีฉันไม่รังเกียจที่จะเห็นการแสดงออกทางคณิตศาสตร์โดยใช้สัญลักษณ์เช่น +, -, ×,,, สำหรับวิชาคณิตศาสตร์พื้นฐานและ√ () จะเป็นฟังก์ชันรากที่สอง หลังจากที่ฉันเรียนจบชั้นประถมฉันจะไม่รังเกียจการเพิ่มสัญลักษณ์ใหม่ที่เป็นประกาย: ∫สำหรับการรวมเข้าด้วยกัน สังเกตแนวโน้มเหล่านี้เป็นตัวดำเนินการทั้งหมด โอเปอเรเตอร์ถูกใช้อย่างหนักมากกว่าชื่อตัวแปร แต่มักใช้ซ้ำเพื่อความหมายที่แตกต่างกันอย่างสิ้นเชิง (ในกรณีที่นักคณิตศาสตร์ใช้ซ้ำโอเปอเรเตอร์) ความหมายใหม่มักจะยังคงคุณสมบัติพื้นฐานบางอย่างของความหมายเก่า เมื่อใช้ชื่อตัวแปรซ้ำ)

สรุปแล้วไม่ดีที่จะใช้อักขระ Unicode สำหรับชื่อตัวแปร อย่างไรก็ตามการใช้ชื่อตัวอักษรเดียวเป็นชื่อที่ไม่ถูกต้องเสมอไปและการได้รับอนุญาตให้ใช้ชื่อ Unicode นั้นไม่ใช่ใบอนุญาตให้ใช้ชื่อตัวแปรตัวอักษรเดียว


9
จะซื่อสัตย์สูตรที่นี่ไม่ได้ทำให้รู้สึกมากขึ้นแม้ว่าผมจะใช้แทนerror_on_measured_skill_with_99th_percent_confidence sigma
badp

4
@badp: ชื่อยาว! = ชื่อดี อย่างไรก็ตามมีหลายครั้งที่คุณไม่สามารถเลือกชื่อที่ดีได้ (เช่นเมื่อคุณเข้าใจสูตรเท่านั้น แต่ไม่เข้าใจอย่างถ่องแท้ว่าแต่ละส่วนของสูตรทำอะไร (ซึ่งใช้ความเข้าใจในระดับที่แตกต่างกันทั้งหมด)) จากนั้นในกรณีนั้นทางเลือกที่ดีที่สุดอันดับสองคือการปกปิดความคิดเห็นของคุณ (ดีกว่าการส่งพวกเขาไปยังกระดาษภายนอก) เพิ่มพจนานุกรมข้อมูลที่อธิบายถึงชื่อตัวแปรที่อ้างอิงเช่น// σw = skill level measurement errorฯลฯ
Lie Ryan

1
@badp: โดยความจริงแล้วด้วยข้อมูลนั้นซิกม่าหมายถึงปัจจัยเหลวไหล (ดังนั้นที่จะพูด) มันทำให้ฉันเข้าใจสูตรได้ดีกว่าซิกซิกที่กระทบฉันเล็กน้อย เมื่อสูตรนั้นยากที่จะเข้าใจเริ่มต้นคุณไม่ต้องการเพิ่มความทึบในด้านบนของสูตร
Lie Ryan

2
ใช่. นี้. น่าเสียดายที่ฉันมองข้ามเมื่อเขียนคำตอบ
Konrad Rudolph

3
ทุกคนที่ทำงานในสิ่งที่เกี่ยวข้องกับสถิติรู้ว่าσหมายถึง "ส่วนเบี่ยงเบนมาตรฐาน" มันเป็นสัญลักษณ์มาตรฐานที่เป็นที่รู้จักกันดีในโดเมนนั้น
TRiG

14

คุณเข้าใจรหัสหรือไม่ ทุกคนที่ต้องการอ่านหรือไม่ ถ้าเป็นเช่นนั้นจะไม่มีปัญหา

โดยส่วนตัวฉันดีใจที่ได้เห็นด้านหลังของรหัสต้นฉบับ ASCII เท่านั้น


เสร็จสิ้น (ฉันถือว่าบรรทัดสุดท้ายที่คุณขอให้ดูรหัสรุ่น ASCII เท่านั้น?) [] (http: // ~)
badp

4
@badp: ไม่ฉันขอให้ดูรหัสตายของ ASCII เท่านั้น

จนกว่าคุณจะเริ่มเห็นสิ่งที่เกิดขึ้นกับไฟล์ต้นฉบับ Unicode เมื่อเชื่อมโยงไปถึงในระบบ Windows 1252 ...

1
@ Thorbjørn: ถ้าพวกเขามี BOM หวังว่าจะไม่มีอะไรเกิดขึ้น

9

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


5
มันเป็นเรื่องยากสำหรับฉันที่จะตรวจสอบให้แน่ใจว่ารหัสและสูตรที่ตรงกันในตอนแรก ...
badp

10
@ พอล: โชคดีที่ Unicode อายุ> 10 ปีดังนั้นการคัดค้านจึงได้รับการดูแล และแม้ว่าจะไม่มีผู้ชนะที่ชัดเจนระหว่าง UTF ที่แตกต่างกันนั่นไม่ใช่ปัญหา: ไม่ควรมีอย่างใดอย่างหนึ่ง การบอกแยกเป็นเรื่องเล็กน้อยสำหรับซอฟต์แวร์
Konrad Rudolph

1
@Konrad: ผมหมายถึง 10 ปีนับจากนี้ จำนวนโปรแกรมที่พอใช้ยังคงไม่รองรับ Unicode เพิ่มเติมฉันไม่เห็นด้วยกับการยืนยันของคุณ - มันไม่สำคัญที่จะเขียนกิจวัตรย้อนกลับทั่วไปที่จัดการทั้ง 3 utfs จะต้องมีผู้ชนะที่ชัดเจน ไม่มีเหตุผลในการสนับสนุน UTF ที่แตกต่างกัน 3 แบบ (ให้เราไม่พิจารณาหน้ารหัสอื่นที่ยังมีอยู่)
พอลนาธาน

3
@ พอล: คุณต้องเขียน "reverse reverse generic" บ่อยแค่ไหน? UTF ทั้งสามนั้นมีจุดประสงค์ที่แตกต่างกันและฉันไม่คิดว่าคุณจะได้รับการรวมกิจการ
Dean Harding

7
@ พอล: ขันโปรแกรมเหล่านี้ มีบรรณาธิการที่ดีพอที่รู้วิธีจัดการ Unicode หากบรรณาธิการบางคนยังไม่ได้อยู่ใน bandwagon ให้เลือกทางเศรษฐกิจดูแลมัน และอย่างที่ดีนกล่าวว่า UTFs นั้นมีจุดประสงค์ที่แตกต่างกัน มันเป็นสิ่งที่ดีที่พวกเขามีอยู่ และฉันไม่เห็นจุดในรูทีนย้อนกลับหลายรายการของคุณ คุณต้องเขียนเพียงครั้งเดียว (ไม่สนใจฟอร์มการทำให้เป็นมาตรฐานในตอนนี้): สำหรับจุดโค้ดไม่ใช่สำหรับ UTF แต่ละตัว
Konrad Rudolph

5

ฉันจะบอกว่าใช้ชื่อตัวแปร Unicode เป็นความคิดที่ดีด้วยเหตุผลสองประการ:

  1. พวกเขาเป็น PITA ที่จะพิมพ์

  2. พวกเขามักจะมีลักษณะเกือบเหมือนตัวอักษรภาษาอังกฤษ นี่คือเหตุผลเดียวกันว่าทำไมฉันเกลียดการเห็นตัวอักษรกรีกในสัญกรณ์คณิตศาสตร์ ลองบอก rho นอกเหนือจาก p มันไม่ง่าย.


6
ขึ้นอยู่กับสิ่งที่คุณใช้พิมพ์
endolith

4

ในกรณีนี้สูตรคณิตศาสตร์ที่ซับซ้อนฉันจะบอกว่าให้ลอง

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

ถ้าฉันต้องรักษารหัส µ และ b ในรหัสมาตรฐานที่คุณยกมาให้ฉันฉันจะรู้ว่าคุณอยู่ที่ไหน ...


3
  • Pro: มันดูดี
  • คอนดิชั่น: อักขระยูนิโค้ดและดังนั้นความหมายทั้งหมดอาจหายไปในห่วงโซ่เครื่องมือ (ตัวแก้ไข, ตัวจัดรูปแบบโค้ด, การควบคุมเวอร์ชัน, คอมไพเลอร์รุ่นเก่า)

คุณมีความเสี่ยงมากแค่ไหน? กำไรนั้นมีมากกว่าความเสี่ยงหรือไม่


2
ห่วงโซ่เครื่องมือ ห่วงโซ่เครื่องมืออะไร
badp

2
เครื่องมือแก้ไข, ตัวจัดรูปแบบโค้ด, การควบคุมเวอร์ชัน, คอมไพเลอร์รุ่นเก่า เครื่องมือและทุกคนที่สัมผัสกับไฟล์ของคุณ ฉันมีประสบการณ์ที่ไม่ดีกับเครื่องมือที่สับสนกับไฟล์ Unicode YMMV
LennyProgrammers

2

บางครั้งในอนาคตที่ไม่ไกลเราจะใช้ text editor / IDEs / เว็บเบราว์เซอร์ที่ทำให้ง่ายต่อการเขียนข้อความแก้ไขรวมถึงตัวอักษรกรีกคลาสสิก ฯลฯ (หรือบางทีเราทุกคนอาจเรียนรู้ที่จะใช้ "ซ่อน" "ฟังก์ชั่นในเครื่องมือที่เราใช้ในปัจจุบัน ... )

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

(โดยบังเอิญเหตุผลที่คุณมีตัวอักษรกรีก แต่ไม่ใช่เครื่องหมายรูทสแควร์ในตัวระบุของ Python นั้นง่ายอักขระภาษากรีกจัดอยู่ในประเภท Unicode Letters แต่เครื่องหมายรากที่สองเป็นตัวอักษรที่ไม่ใช่ตัวอักษรดูที่http://www.python.org / dev / peps / pep-3131 / )


ฉันคิดว่ามันเป็นความคิดที่ดีที่จะสร้าง IME ซึ่งสามารถแปลอักขระสำหรับผู้ใช้ที่ไม่สามารถป้อนข้อมูลเหล่านั้นได้โดยตรง
AndrejaKo

ใช่มากขึ้นหรือน้อยลงเมื่อเราเปลี่ยนเป็น DVORAK :(
badp

1
@AndrejaKo Linux มี IME ที่ยอมรับคำสั่งสไตล์ LaTeX นั่นคือคุณพิมพ์\muและใส่µเข้าไป
badp

@badp ขอบคุณมาก! ฉันจะลองครั้งต่อไปที่ฉันบูต!
AndrejaKo

Emacs รองรับวิธีป้อนข้อมูลจำนวนมากที่ทำให้การพิมพ์สัญลักษณ์ Unicode เป็นเรื่องง่าย (รวมถึงเท็กซ์หนึ่งซึ่งเป็นสิ่งที่ฉันใช้) Emacs นั้นแทบจะไม่มีอนาคต (มันเป็นที่น่ากลัวของหลักสูตร.)
ทิคฮอน Jelvis

2

คุณไม่ได้พูดภาษาที่คุณใช้คอมไพเลอร์ แต่โดยทั่วไปแล้วกฎสำหรับชื่อตัวแปรก็คือว่าพวกเขาจะต้องเริ่มต้นด้วยตัวอักษรหรือเครื่องหมายขีดล่างและมีเพียงตัวอักษรและขีดล่าง Unicode √จะไม่ถือว่าเป็นตัวอักษรและตัวเลขเนื่องจากเป็นสัญลักษณ์ทางคณิตศาสตร์แทนที่จะเป็นตัวอักษร อย่างไรก็ตามσอาจเป็น (เนื่องจากเป็นตัวอักษรกรีก) และáน่าจะถือว่าเป็นตัวอักษรและตัวเลข


1

ฉันโพสต์คำถามประเภทเดียวกันบนStackOverflow

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

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

ทางเลือกในการใช้ชื่อที่สื่อความหมายยาวนั้นไม่สามารถใช้งานได้เพราะในคณิตศาสตร์หากตัวระบุไม่สั้นสูตรจะดูซับซ้อนยิ่งขึ้น (ทำไมคุณคิดว่าผู้คนในศตวรรษที่สิบแปดเริ่มเปลี่ยน "บวก" โดย "+" และ "ลบ" โดย "-"?)

โดยส่วนตัวแล้วฉันจะใช้ตัวห้อยและตัวยกบางตัว (ฉันเพิ่งคัดลอกวางจากหน้านี้ ) ตัวอย่างเช่น: (มีงูใหญ่อนุญาต√เป็นตัวระบุ)

√ = math.sqrt #function alias
c² = c**2
σʷ² = σʷ**2
γ² = γ**2
σ′ʷ = √(σʷ² * (1 - (σʷ²/c²)*Wʷⁱⁿ(t, e)) + γ²)

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

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


0

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

รหัสนี้มีไว้สำหรับให้ผู้อื่นใช้หรือไม่ เช่นและแอปโอเพนซอร์สของการจัดเรียงบางอย่าง? ถ้าเป็นเช่นนั้นคุณอาจจะถามถึงปัญหาเพราะโปรแกรมเมอร์ต่าง ๆ ใช้ตัวแก้ไขที่แตกต่างกันและคุณไม่แน่ใจว่าผู้แก้ไขทั้งหมดจะสนับสนุนยูนิโค้ดอย่างถูกต้อง นอกจากนี้เชลล์คำสั่งบางส่วนจะแสดงอย่างถูกต้องเมื่อไฟล์ซอร์สโค้ดเป็นประเภท / cat'd และคุณอาจพบปัญหาหากคุณต้องการแสดงภายใน html


0

โดยส่วนตัวฉันมีแรงจูงใจที่จะพิจารณาภาษาการเขียนโปรแกรมเป็นเครื่องมือสำหรับนักคณิตศาสตร์ในบริบทนี้เนื่องจากฉันไม่ได้ใช้คณิตศาสตร์ที่ดูเหมือนอะไรในชีวิตของฉัน : D และแน่นอนว่าทำไมไม่ใช้ɛหรือσหรืออะไรก็ตามในบริบทนั้นมันชัดเจนมากขึ้น

(แม้ว่าฉันต้องบอกว่าการตั้งค่าของฉันจะสนับสนุนหมายเลขตัวยกเป็นการเรียกเมธอดโดยตรงไม่ใช่ชื่อตัวแปรเช่น2² = 2 ** 2 = 4 เป็นต้น)


-2

อะไรนรกคือσสิ่งที่เป็นWสิ่งที่เป็นε, cและสิ่งที่เป็นγ?
คุณต้องตั้งชื่อตัวแปรของคุณในแบบที่อธิบายถึงวัตถุประสงค์ของพวกเขา
ฉันจะเอาชนะใครก็ตามที่จะออกจาก Unicode หรือ ASCII-version เป็นการส่วนตัวเพื่อให้ฉันรักษาแม้ว่า ASCII-version นั้นจะดีกว่า

สิ่งที่ชั่วร้ายกำลังเรียกตัวแปรσหรือsหรือsigmaหรือvalueหรือvar1เพราะสิ่งนี้ไม่ได้ถ่ายทอดข้อมูลใด ๆ

สมมติว่าคุณเขียนโค้ดของคุณเป็นภาษาอังกฤษ (เพราะฉันเชื่อว่าคุณควรจะอยู่ที่ไหนก็ตาม), ASCII ควรจะพอเพียงที่จะให้ชื่อตัวแปรที่มีความหมายแก่คุณดังนั้นจึงไม่จำเป็นต้องใช้ Unicode


2
ถ้าเขาทำสำเนา / วางกระดาษแล้วทำให้มันเป็นส่วนหนึ่งของซอร์สโค้ดของเขาเป็นความคิดเห็นแม้จะมีชื่อตัวแปรตัวละครตัวหนึ่ง
Brian

19
ชื่อตัวแปรเหล่านี้จำนวนมากมีความหมายที่ดีสำหรับผู้ที่คุ้นเคยกับโดเมนปัญหา สำหรับคนที่คุ้นเคยกับโดเมนชื่อภาษาอังกฤษอาจอ่านได้น้อยกว่าชื่ออย่าง sigma หรือ rho
dsimcha

3
ฉันกลัวว่าบางสิ่งบางอย่างrank_error_with_99_pct_confidenceจะยาวเกินไปและไม่ทำให้สูตรเข้าใจได้ง่ายขึ้น AllegSkill / TrueSkill เรียก sigma เหล่านั้นดังนั้นฉันเชื่อว่าเป็นที่ยอมรับได้อย่างสมบูรณ์แบบของฉันที่จะรักษาชื่อเฉพาะของโดเมนที่พวกเขามี
badp

3
@badp: ชื่อที่ดีกระชับและมีความหมาย; แต่ไม่จำเป็นต้องสื่อความหมายอย่างเต็มที่ สำหรับซิกม่าของคุณมันสมบูรณ์แบบที่จะใช้rank_errorและใส่รายละเอียดเพิ่มเติมเกี่ยวกับความมั่นใจ 99 เปอร์เซ็นต์ในเอกสาร / ความคิดเห็นที่ไหนสักแห่ง
Lie Ryan

1
@dsimcha: ฉันคิดว่าผู้ที่คุ้นเคยกับโดเมนเฉพาะนั้นหายากกว่าโดเมนที่ไม่เคยได้ยินมาก่อน และฉันคิดว่าคนที่คุ้นเคยกับโดเมนจะสามารถรับมือกับชื่อภาษาอังกฤษธรรมดา ๆ ได้ในขณะที่คนที่ไม่คุ้นเคยจะไม่สามารถเข้าใจได้อย่างสมบูรณ์ว่าเกิดอะไรขึ้นหากทุกอย่างยุ่งเหยิงจากตัวแปรตัวอักษรกรีกตัวหนึ่ง
back2dos

-2

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

การใช้√หรือ²ในตัวระบุ - ไม่มาก

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