คำถามติดแท็ก syntax

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

7
ทำไมเครื่องหมายอัฒภาคและจุลภาคสลับกันเป็นลูป
ในหลายภาษา (รายการกว้างจาก C ถึง JavaScript): ,คั่นด้วยจุลภาคคั่น (เช่นfunc(a, b, c)) ขณะที่ อัฒภาค;แยกคำแนะนำตามลำดับ (เช่นinstruction1; instruction2; instruction3) เหตุใดการทำแผนที่นี้จึงย้อนกลับเป็นภาษาเดียวกันสำหรับfor loops : for ( init1, init2; condition; inc1, inc2 ) { instruction1; instruction2; } แทน (สิ่งที่ดูเป็นธรรมชาติสำหรับฉัน) for ( init1; init2, condition, inc1; inc2 ) { instruction1; instruction2; } ? แน่นอนว่าforเป็น (ปกติ) ไม่ทำงาน แต่ข้อโต้แย้ง (เช่นinit, condition, …

9
อะไรคือความแตกต่างระหว่าง "ไวยากรณ์" และ "น้ำตาลเชิงกล"
พื้นหลัง หน้า Wikipedia เกี่ยวกับSyntactic Sugarกล่าวว่า: ในวิทยาการคอมพิวเตอร์น้ำตาล syntactic เป็นไวยากรณ์ในภาษาการเขียนโปรแกรมที่ออกแบบมาเพื่อให้สิ่งที่ง่ายต่อการอ่านหรือการแสดง มันทำให้ภาษา "หวาน" สำหรับมนุษย์ที่จะใช้: สิ่งที่สามารถแสดงได้ชัดเจนยิ่งขึ้นรัดกุมหรือในรูปแบบทางเลือกที่บางคนอาจชอบ ฉันไม่เข้าใจจริงๆว่าความแตกต่างระหว่างวากยสัมพันธ์น้ำตาลกับวากยสัมพันธ์คืออะไร ฉันขอขอบคุณจุดที่รุ่นน้ำตาลสามารถชัดเจนและกระชับมากขึ้นบางทีต้มออกไปบางแผ่น แต่ฉันรู้สึกว่าในบางระดับไวยากรณ์ทั้งหมดจะทำเช่นนั้นเพื่อสร้างสิ่งที่เป็นนามธรรมเกี่ยวกับสิ่งที่โค้ดได้รับการรวบรวมลงไป จากหน้า Wikipedia เดียวกัน: ตัวประมวลผลภาษารวมถึงคอมไพเลอร์ตัววิเคราะห์แบบคงที่และที่คล้ายกันมักจะขยายการสร้าง sugared เป็นโครงสร้างพื้นฐานมากขึ้นก่อนการประมวลผลบางครั้งกระบวนการที่เรียกว่า "desugaring" ในฐานะที่เป็นแบบฝึกหัดทางความคิดถ้าฉันใช้ "บ่อยครั้ง" ในคำสั่งนี้เพื่อหมายถึง "เสมอ": หากความแตกต่างเป็นเพียงว่าคอมไพเลอร์ "desugars" ไวยากรณ์ก่อนที่จะย้ายไปยังขั้นตอนถัดไป ของคอมไพเลอร์รู้ (หรือสนใจ) อะไรคือ Sugar'd Syntax หรือไม่ คำถามที่เกี่ยวข้องมากในเว็บไซต์นี้"คำจำกัดความที่เข้มงวดของน้ำตาลซินแทคติค" มีคำตอบที่เริ่ม: IMHO ฉันไม่คิดว่าคุณจะมีคำจำกัดความเกี่ยวกับน้ำตาลในประโยคเพราะวลีนี้เป็น BS และน่าจะถูกใช้โดยคนที่พูดถึง "โปรแกรมเมอร์จริง" โดยใช้ "เครื่องมือจริง" ใน "ระบบปฏิบัติการจริง" สิ่งใดที่อาจบ่งบอกฉันได้ว่าอาจไม่มีความแตกต่างอย่างมากกับ coder ที่ใช้ภาษานี้ บางทีความแตกต่างอาจสังเกตได้เฉพาะนักเขียนคอมไพเลอร์เท่านั้น? …

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

4
ทำไมนักพัฒนา C # ขึ้นบรรทัดใหม่การเปิดวงเล็บ [ปิด]
ฉันใช้เวลาส่วนใหญ่ในช่วงหลายปีที่ผ่านมาทำงานเป็นหลักกับ C # และ SQL โปรแกรมเมอร์ทุกคนที่ฉันทำงานด้วยในช่วงเวลานั้นอยู่ในนิสัยของการวางวงเล็บเปิดของคำสั่งฟังก์ชั่นหรือการควบคุมการไหลของบรรทัดใหม่ ดังนั้น ... public void MyFunction(string myArgument) { //do stuff } if(myBoolean == true) { //do something } else { //do something else } ฉันได้รับการหลงโดยพื้นที่ที่สิ้นเปลืองนี้โดยเฉพาะในงบ / อื่น ๆ และฉันรู้ว่ามีตัวเลือกอื่นใน C # รุ่นที่ใหม่กว่าเช่น: if(myBoolean == true) //do something on one line of code แต่ไม่ค่อยมีใครใช้พวกเขา ทุกคนทำสิ่งที่หยิก - …
44 java  c#  javascript  syntax 

18
ไวยากรณ์มีความสำคัญในภาษาโปรแกรมหรือไม่ [ปิด]
อาจารย์คนหนึ่งของฉันบอกว่า "ไวยากรณ์คือ UI ของภาษาการเขียนโปรแกรม", ภาษาอย่าง Ruby มีความสามารถในการอ่านได้ดีและกำลังขยายตัว แต่เราเห็นโปรแกรมเมอร์จำนวนมากทำงานด้วย C \ C ++ ดังนั้นโปรแกรมเมอร์จึงสำคัญสำหรับไวยากรณ์ ควรจะยอมรับได้หรือไม่ ฉันชอบที่จะรู้ความคิดเห็นของคุณเกี่ยวกับเรื่องนี้ คำเตือน: ฉันไม่ได้พยายามที่จะเริ่มต้นการโต้แย้ง ฉันคิดว่านี่เป็นหัวข้อสนทนาที่ดี อัปเดต: สิ่งนี้กลายเป็นหัวข้อที่ดี ฉันดีใจที่คุณทุกคนมีส่วนร่วม

12
เหตุใดภาษาการเขียนโปรแกรมส่วนใหญ่จึงมีคำหลักหรือไวยากรณ์พิเศษสำหรับการประกาศฟังก์ชั่น [ปิด]
ภาษาโปรแกรมส่วนใหญ่ (ทั้งภาษาแบบไดนามิกและแบบคงที่) มีคำหลักพิเศษและ / หรือไวยากรณ์ที่มีลักษณะแตกต่างจากการประกาศตัวแปรสำหรับฟังก์ชั่นการประกาศ ฉันเห็นฟังก์ชั่นเช่นเดียวกับการประกาศเอนทิตีที่มีชื่ออื่น: ตัวอย่างเช่นใน Python: x = 2 y = addOne(x) def addOne(number): return number + 1 ทำไมจะไม่ล่ะ: x = 2 y = addOne(x) addOne = (number) => return number + 1 ในทำนองเดียวกันในภาษาเช่น Java: int x = 2; int y = addOne(x); int addOne(int x) { return …

6
เหตุใดการทดสอบภาษาจึงไม่รองรับคุณสมบัติที่ระดับไวยากรณ์
คุณสามารถค้นหารายการบล็อกบทความและเว็บไซต์ที่ไม่สิ้นสุดซึ่งส่งเสริมประโยชน์ของการทดสอบหน่วยซอร์สโค้ดของคุณ เกือบจะรับประกันได้ว่านักพัฒนาที่เขียนโปรแกรมคอมไพเลอร์สำหรับ Java, C ++, C # และภาษาที่พิมพ์อื่น ๆ ใช้การทดสอบหน่วยเพื่อตรวจสอบงานของพวกเขา ดังนั้นทำไมแม้จะมีความนิยมของมันคือการทดสอบขาดจากไวยากรณ์ของภาษาเหล่านี้หรือไม่ Microsoft แนะนำLINQให้กับC #ดังนั้นทำไมพวกเขาจึงไม่สามารถเพิ่มการทดสอบได้อีกด้วย ฉันไม่ต้องการคาดการณ์ว่าการเปลี่ยนแปลงภาษาเหล่านั้นจะเป็นเช่นไร แต่เพื่ออธิบายให้ชัดเจนว่าทำไมพวกเขาถึงไม่เริ่มต้นด้วย เป็นตัวอย่าง: เรารู้ว่าคุณสามารถเขียนforลูปโดยไม่มีไวยากรณ์ของforคำสั่ง คุณสามารถใช้whileหรือif/ gotoงบ มีคนตัดสินใจว่าforข้อความนั้นมีประสิทธิภาพมากกว่าและนำมาใช้เป็นภาษา ทำไมการทดสอบไม่ได้ทำตามวิวัฒนาการของภาษาโปรแกรมเดียวกัน?

7
เหตุใดภาษาหลักส่วนใหญ่จึงไม่สนับสนุนไวยากรณ์“ x <y <z” สำหรับการเปรียบเทียบแบบบูลีน 3 ทาง
หากฉันต้องการเปรียบเทียบตัวเลขสองตัว (หรือเอนทิตีที่มีการจัดลำดับที่ดีอื่น ๆ ) ฉันจะทำเช่นx &lt; yนั้น ถ้าผมต้องการเปรียบเทียบสามของพวกเขา, x &lt; y &lt; zนักเรียนพีชคณิตโรงเรียนมัธยมจะแนะนำพยายาม โปรแกรมเมอร์ในตัวฉันจะตอบกลับด้วย "ไม่นั่นไม่ถูกต้องคุณต้องทำx &lt; y &amp;&amp; y &lt; z" ภาษาส่วนใหญ่ที่ฉันพบเจอดูเหมือนจะไม่สนับสนุนไวยากรณ์นี้ซึ่งเป็นเรื่องแปลกเพราะมันเป็นเรื่องธรรมดาในวิชาคณิตศาสตร์ Python เป็นข้อยกเว้นที่น่าสังเกต JavaScript ดูเหมือนข้อยกเว้น แต่จริงๆแล้วเป็นเพียงผลพลอยได้ที่โชคร้ายของลำดับความสำคัญของผู้ปฏิบัติงานและการแปลงโดยนัย ใน Node.js, 1 &lt; 3 &lt; 2ประเมินเพราะมันจริงๆtrue(1 &lt; 3) &lt; 2 === true &lt; 2 === 1 &lt; 2 ดังนั้นคำถามของฉันคือ: เหตุใดจึงx &lt; y …

5
เมื่อไหร่ที่จะต้องรวบรวมภาษาของตัวเองเป็นรหัส C ก่อน?
เมื่อออกแบบภาษาการเขียนโปรแกรมของตัวเองมันจะเหมาะสมที่จะเขียนตัวแปลงที่ใช้ซอร์สโค้ดและแปลงเป็นรหัส C หรือ C ++ เพื่อให้ฉันสามารถใช้คอมไพเลอร์ที่มีอยู่เช่น gcc เพื่อจบด้วยรหัสเครื่อง? มีโครงการที่ใช้วิธีนี้หรือไม่?

1
เหตุใด C ++ ไม่มีคำหลัก“ บริสุทธิ์” สำหรับฟังก์ชันเสมือนจริง
ฉันสงสัยอยู่เสมอว่าทำไมเราถึงโค้ด virtual void MyFunction() = 0; และไม่ pure virtual void MyFunction(); มีการอ้างอิงสำหรับพื้นฐานของการตัดสินใจนี้หรือไม่?

9
'<' กับ '! =' เป็นเงื่อนไขในการวนรอบ 'สำหรับ'?
สมมติว่าคุณมีforลูปต่อไปนี้: for (int i = 0; i &lt; 10; ++i) { // ... } ซึ่งมันมักจะเขียนด้วย: for (int i = 0; i != 10; ++i) { // ... } ผลลัพธ์ที่ได้จะเหมือนกันดังนั้นจึงมีข้อโต้แย้งที่แท้จริงสำหรับการใช้อย่างใดอย่างหนึ่งมากกว่าอื่น ๆ ? ส่วนตัวผมใช้ตัวแรกในกรณีiด้วยเหตุผลบางอย่างไปยุ่งเหยิงและข้ามค่า 10 * แก้ตัวการใช้หมายเลขเวทย์มนตร์ แต่เป็นเพียงตัวอย่างเท่านั้น
31 syntax 

16
ฉันกำลังเขียนเกี่ยวกับไวยากรณ์ภาษา มีภาษาใดบ้างที่มีพารามิเตอร์ใดวางอยู่ภายในชื่อเมธอด?
ใน JavaScript: function getTopCustomersOfTheYear(howManyCustomers, whichYear) { // Some code here. } getTopCustomersOfTheYear(50, 2010); ใน C #: public List&lt;Customer&gt; GetTopCustomersOfTheYear(int howManyCustomers, int whichYear) { // Some code here } List&lt;Customer&gt; customers = GetTopCustomersOfTheYear(50, 2010); ใน PHP: public function getTopCustomersOfTheYear($howManyCustomers, $whichYear) { // Some code here } $customers = getTopCustomersOfTheYear(50, 2010); มีภาษาใดบ้างที่สนับสนุนไวยากรณ์นี้: …

10
มีเหตุผลใดที่ภาษาการเขียนโปรแกรมส่วนใหญ่ไม่มี '!>' (ไม่มากกว่า) และ '! <' (ไม่น้อยกว่า) ตัวดำเนินการหรือไม่
ฉันสงสัยว่ามีเหตุผลใด - หรือถ้ามันเป็นแค่อุบัติเหตุของประวัติศาสตร์ - ว่าไม่มี!&gt;และ!&lt;ตัวดำเนินการในภาษาการเขียนโปรแกรมส่วนใหญ่ ? a &gt;= b (เป็นมากกว่าหรือเท่ากับข)อาจจะเขียนเป็น!(a &lt; b) (เป็นขไม่น้อย)a !&lt; bที่เท่าเทียมกัน คำถามนี้ทำให้ฉันหลงเมื่อฉันอยู่ในระหว่างการสร้างรหัสการสร้างต้นไม้แสดงออกของฉันเอง ภาษาโปรแกรมส่วนใหญ่มีa != bผู้ประกอบการสำหรับ!(a=b)ดังนั้นทำไมไม่!&gt;และ!&lt;? UPDATE: !&lt;(ไม่น้อยกว่า) ออกเสียงได้ง่ายกว่า&gt;=(มากกว่าหรือเท่ากับ) !&lt;(ไม่น้อยกว่า) พิมพ์สั้นกว่า&gt;=(มากกว่าหรือเท่ากับ) !&lt;(ไม่น้อยกว่า) ง่ายต่อการเข้าใจ *มากกว่า&gt;=(มากกว่าหรือเท่ากับ) * เนื่องจากORเป็นตัวดำเนินการแบบไบนารีที่คุณสมองจำเป็นต้องใช้ตัวถูกดำเนินการสองตัว (ตัวคูณเท่ากับ) ในขณะที่ตัวNOTดำเนินการแบบเอกเทศและสมองของคุณจำเป็นต้องทำงานด้วยตัวถูกดำเนินการตัวเดียว (น้อยกว่า)

22
ทำไม VB จึงเป็นที่นิยม [ปิด]
สำหรับฉันแล้ว Visual Basic ดูเหมือนจะเงอะงะน่าเกลียดผิดพลาดและอ่านยาก ฉันจะให้คนอื่น ๆ ที่อธิบาย ว่าทำไม ในขณะที่ VB.net เป็นก้าวกระโดดครั้งใหญ่สำหรับภาษาในแง่ของคุณสมบัติอย่างชัดเจน แต่ฉันก็ยังไม่เข้าใจว่าทำไมทุกคนเลือกที่จะใช้รหัสใน VB มากกว่าพูด C # อย่างไรก็ตามฉันยังคงเห็น (แอปพลิเคชันเชิงพาณิชย์ส่วนใหญ่จาก "ร้านค้า MS" ที่สร้างขึ้นใน VB ฉันสามารถแก้ไขได้ในเรื่องนี้ แต่ VB ก็ยังคงเป็นที่นิยมมากกว่าที่ควรจะเป็น ทุกคนสามารถช่วยตอบคำถามเหล่านี้ (หรือทั้งหมด): ฉันขาดอะไรบางอย่างกับ VB หรือไม่? ง่ายต่อการเรียนรู้หรือ "เป็นมิตร" มากกว่า C # หรือไม่ มีคุณสมบัติที่ฉันไม่รู้หรือไม่? ทำไม VB / VB.net จึงใช้บ่อยในปัจจุบันโดยเฉพาะในโครงการเว็บ?

13
ทำไมภาษาโปรแกรมไม่จัดการปัญหาซิงโครนัส / อะซิงโครนัสโดยอัตโนมัติ?
ฉันไม่ได้พบแหล่งข้อมูลมากมายเกี่ยวกับสิ่งนี้: ฉันสงสัยว่ามันเป็นไปได้ / เป็นความคิดที่ดีที่จะสามารถเขียนโค้ดแบบอะซิงโครนัสในแบบซิงโครนัส ตัวอย่างเช่นนี่คือโค้ด JavaScript บางอย่างที่ดึงจำนวนผู้ใช้ที่เก็บในฐานข้อมูล (การดำเนินการแบบอะซิงโครนัส): getNbOfUsers(function (nbOfUsers) { console.log(nbOfUsers) }); มันคงจะดีถ้าได้เขียนอะไรแบบนี้: const nbOfUsers = getNbOfUsers(); console.log(getNbOfUsers); console.logและเพื่อให้คอมไพเลอร์โดยอัตโนมัติจะดูแลการรอคอยสำหรับการตอบสนองแล้วรัน มันจะรอให้การดำเนินการแบบอะซิงโครนัสเสร็จสมบูรณ์ก่อนที่ผลลัพธ์จะต้องถูกนำไปใช้ที่อื่น เราจะใช้สัญญาการติดต่อกลับน้อยลงอย่างมาก async / รอหรืออะไรก็ตามและไม่ต้องกังวลว่าผลลัพธ์ของการดำเนินการจะพร้อมใช้งานทันทีหรือไม่ ข้อผิดพลาดจะยังคงสามารถจัดการได้ (ได้nbOfUsersรับจำนวนเต็มหรือข้อผิดพลาด?) โดยใช้ลอง / จับหรือสิ่งที่ชอบตัวเลือกเช่นในภาษาสวิฟท์ มันเป็นไปได้? มันอาจเป็นความคิดที่น่ากลัว / ยูโทเปีย ... ฉันไม่รู้

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