การจัดการกับน้ำซุปรั้งหยิก


11

ฉันเขียนโปรแกรมทั้ง C # และ VB.NET มาหลายปีแล้ว แต่ส่วนใหญ่เป็น VB ฉันเปลี่ยนอาชีพไปสู่ ​​C # และโดยรวมแล้วฉันชอบ C # ดีกว่า

แต่ประเด็นหนึ่งที่ฉันมีก็คือซุปรั้งปีกนก ใน VB คำหลักโครงสร้างแต่ละคำมีคีย์เวิร์ดปิดที่ตรงกันตัวอย่างเช่น:

Namespace ...
    Class ...
        Function ...
            For ...
                Using ...
                    If ...
                        ...
                    End If
                    If ...
                        ...
                    End If
                End Using
            Next
        End Function
    End Class
End Namespace

รหัสเดียวกันที่เขียนใน C # จบลงยากมากที่จะอ่าน:

namespace ... {
    class ... {
        function ... {
            for ... {
                using ... {
                    if ... {
                        ...
                    }
                    if ... {
                        ...
                    }
                }
            }
            // wait... what level is this?
        }
    }
}

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


83
ฉันรู้ว่าสิ่งนี้อาจฟังดูเทศน์และบางทีคุณอาจมีเงื่อนไขพิเศษที่ต้องใช้ (เพราะบางครั้งก็จำเป็น - ขอบคุณที่เวลาเช่นนี้น่าจะหายาก) แต่โดยปกติแล้ว "... 8 หรือมากกว่านั้นในการจัดฟันแบบหยิก ตั้งหลายหน้าเพื่อหาว่าวงเล็บปีกกาจบบล็อกที่ฉันสนใจ "หมายความว่าโค้ดต้องการการรีแฟคเตอร์และการล้างข้อมูลอย่างจริงจัง
FrustratedWithFormsDesigner

7
สิ่งหนึ่งที่ฉันได้ทำไปแล้วและสิ่งที่ฉันได้ทำก็คือในตอนท้ายของการทำลอนผมจะเพิ่มความคิดเห็นเกี่ยวกับมัน // End's using X statementสิ่งที่ชอบ
PiousVenom

14
@FrustratedWithFormsDesigner เป็นจุดที่เกี่ยวกับความจริงที่ว่าการควบคุมการไหลของคุณเป็นระเบียบและจะต้องทำซ้ำ ที่กล่าวว่าฉันคิดว่าคุณกำลังบ่นเกี่ยวกับการดัดผมแบบโค้งมากกว่าการกำหนดขอบเขตและฉันจะบอกว่าคุณแค่ต้องชินกับมัน การเรียนรู้ภาษาที่มีไวยากรณ์แตกต่างกันอย่างมีนัยสำคัญมากกว่าที่คุณเคยคุ้นเคยกับซุปเป็นระยะเวลานาน แต่ด้วยการฝึกฝนที่หายไป คุณเพียงแค่ต้องหัวเข็มขัดและจัดการจนกว่าสมองของคุณจะเริ่มประมวลผลไวยากรณ์ตามธรรมชาติมากขึ้นคุณจะไปถึงที่นั่น
จิมมี่ฮอฟฟา

2
@FrustratedWithFormsDesigner - ฉันจำเป็นต้องล้างวัตถุ COM จำนวนมากในสถานการณ์ COM interop ฉันใช้เทคนิคที่แนะนำในบทความนี้: jake.ginnivan.net/vsto-com-interop สร้างสองหรือสามชั้นได้อย่างง่ายดาย เมื่อคุณสแต็กวนลูป for, ฟังก์ชัน, คลาสและเนมสเปซอยู่ด้านบนของนั้น (พร้อมด้วยคำสั่ง if) คุณจะไปที่เลเยอร์หลายเลเยอร์ได้อย่างง่ายดาย
JDB ยังคงจำโมนิก้า

5
@TyrionLannister - และนั่นอาจเป็นความคิดเห็นที่เร็วที่สุดที่จะซิงค์กับสิ่งที่พวกเขาเป็น ... ฉันคิดว่าถ้าฉันจะมีอะไรแบบนั้นฉันอยากให้มันสร้างขึ้นอัตโนมัติ เวลาเท่านั้นไม่คงอยู่) โดย IDE
Clockwork-Muse

คำตอบ:


39

ใส่วงเล็บปีกกาเริ่มต้นของคุณใน "อันดับ" เดียวกับที่สิ้นสุดของคุณเช่นนี้:

namespace ... 
{
    class ... 
    {
        function ... 
        {
            for ... 
            {
                using ... 
                {
                    if ... 
                    {
                        ...
                    }
                    if ... 
                    {
                        ...
                    }
                }
            }
            // It's the `function` level!
        }
    }
}

15
ฉันเห็นด้วย. วงเล็บอียิปต์ทำให้ฉันปวดหัว
PiousVenom

8
นอกจากนี้ IDEs ส่วนใหญ่ (อาจจะ) เน้นพันธมิตรของรั้งเมื่อคุณคลิกที่มัน
StuperUser

3
@TyrionLannister: ขอบคุณที่ให้คำศัพท์กับสไตล์นั้นในที่สุด! ฉันไม่เคยมีชื่อที่ดีสำหรับพวกเขานอกเหนือจาก "การจัดฟันผิด"
FrustratedWithFormsDesigner

3
@ Cyborgx37: IDE ของคุณมีคุณสมบัติ "ไปที่การจับคู่ที่ตรงกัน" หรือไม่? โดยปกติจะถูกผูกไว้กับปุ่มทางลัดที่จะย้ายเคอร์เซอร์ของคุณไปที่วงเล็บปีกกาที่ตรงกับที่เน้นอยู่
FrustratedWithFormsDesigner

3
ต้องบอกว่าฉันไม่เห็นว่ามันจะทำให้ง่ายขึ้นได้อย่างไร วิธีใดก็ตามที่คุณค้นหาหน้าจอในระดับการเยื้องของวงเล็บปีกกาจนกระทั่งได้คำสำคัญ และด้วยการเพิ่มบรรทัดพิเศษเหล่านั้นตอนนี้คุณมีลักษณะเพิ่มเติม
Blorgbeard เปิดให้บริการ

14
  • ทั้งนี้ขึ้นอยู่กับ IDE ของคุณ: วางเคอร์เซอร์ของคุณที่วงเล็บปีกกาเปิด / ปิดและมันจะเน้นทั้งที่และวงเล็บปีกกาที่สอดคล้องกัน
  • ยุบบล็อกและจะแสดงตำแหน่งที่เปิด / ปิด
  • เขียนบล็อคโค้ดที่เล็กลง อย่างจริงจัง. ลองดูClean Codeและอย่าพบปัญหานี้อีก (และมีรหัสที่สามารถอ่าน / บำรุงรักษาได้มากกว่า)

One note, ต่อไปนี้เป็นไวยากรณ์ c # ที่ถูกต้องที่อาจช่วยสถานการณ์ของคุณโดยเฉพาะ:

using (var type = new MyDisposable1())
using (var type2 = new MyDisposable2())
{
    /* do what you will with type2 and type2 */
}

การตามล่าตัวละครที่เน้นสีเดียวคือสิ่งที่ทำให้ฉันต้องโพสต์คำถามนี้ตั้งแต่แรก
JDB ยังคงจำโมนิก้า

2
@ Cyborgx37: ดังนั้นจุดที่ 3 ถ้าบล็อกโค้ดทั้งหมดของคุณพอดีกับหน้าจอคุณไม่จำเป็นต้องตามล่า ในคลาสส่วนใหญ่ / ทั้งหมดที่ฉันเขียนวงเล็บปีกกาคู่เดียวที่ไม่พอดีกับหน้าจอคือเนมสเปซ / คลาส
Steven Evers

สิ่งที่คุณแนะนำในจุดที่ 1 & 2 คือสิ่งที่ฉันทำตอนนี้ ... แต่สิ่งนี้ต้องการให้ฉันออกจากสถานที่ที่ฉันเขียนโค้ดและเริ่มจัดการมุมมองของรหัสเพื่อหาว่าจะใส่บรรทัดถัดไปที่ไหน โดยเฉพาะอย่างยิ่งถ้าโค้ดของคุณต้องการusingบล็อกหลายเลเยอร์(ดูjake.ginnivan.net/vsto-com-interop )
JDB ยังจดจำโมนิก้า

@ Cyborgx37: ดูการแก้ไขของฉัน
Steven Evers

1
@ Cyborgx37 ถ้าคุณเลือกสีที่ยืนออกจากทุกสิ่งทุกอย่าง (ผมใช้พื้นหลังสีม่วงและสีขาวสำหรับข้อความในขณะที่ IIRC) แล้วมีความจำเป็นที่จะต้องตามล่าหารั้งการจับคู่ไม่มี - มันจริงที่คุณร้อง "ฉันที่นี่ ! "
CVn

5

หลักการทั่วไปคือการเพิ่มความคิดเห็นหลังวงเล็บปิดเพื่อระบุโครงสร้างที่ปิด:

if {
   ...
} // end if

while (condition) {
   ...
} // end while

ฯลฯ ฉันไม่เคยรู้สึกอบอุ่นกับอนุสัญญานี้ แต่บางคนเห็นว่าเป็นประโยชน์


16
ฉันเคยเห็นคนทำเช่นนี้และเมื่อพวกเขาสลับ / เปลี่ยนจุดเริ่มต้นของบล็อก (เปลี่ยนเป็นwhilea for, เปลี่ยนเป็นifข้อความ) พวกเขาเกือบจะไม่จำที่จะอัปเดตความคิดเห็นปิดพวกเขาแย่กว่าไร้ประโยชน์ การประชุมนี้อาจจะมีประโยชน์ก็ต่อเมื่อคุณสามารถบังคับตัวเองให้รักษาความคิดเห็นทุกครั้งที่ธรรมชาติของการ{เปลี่ยนแปลงที่ตรงกัน
FrustratedWithFormsDesigner

ใช่ฉันทำไปแล้ว แต่ก็มีงานพิเศษมากมาย (และเสียงรบกวน) ฉันหวังว่าจะมีสิ่งที่ตรงไปตรงมามากขึ้น
JDB ยังคงจำโมนิก้า

5
ความคิดเห็นเท่านั้นควรจะอธิบายว่าทำไมไม่เคยสิ่งที่หรือวิธีการที่เป็นรหัสที่ไม่ทั้งสองเหล่านั้นและอาศัยความเห็นที่จะอธิบายทั้งของพวกเขาหมายความว่ารหัสนั้นยากที่จะอ่านซึ่งเป็นสัญญาณรหัสควรได้รับการแก้ไขไม่ได้แสดงความคิดเห็น
จิมมี่ฮอฟฟา

1
สิ่งนี้ทำให้ฉันสงสัยว่าทำไมไม่มีใครเขียนเอดิเตอร์ที่แสดงความคิดเห็นเหล่านี้ แต่จริงๆแล้วไม่ได้รวมไว้ในรหัส ..
Brendan Long

2
@JimmyHoffa: ผมคิดว่ากฎที่ดีกว่าสำหรับการแสดงความคิดเห็นเป็นว่าพวกเขาควรจะให้ความชัดเจน โดยปกติแล้วหมายถึงการตอบ "ทำไม" แต่มันอาจหมายถึงสิ่งอื่น ๆ อย่าจมดิ่งอยู่ในความเชื่อที่จะห้ามไม่ให้คุณทำสิ่งที่ช่วยได้จริงเช่นในบางครั้งการเพิ่มความคิดเห็นในวงเล็บปิดที่อยู่ห่างไกลจากวงเล็บเปิดของมัน
ไบรอัน Oakley

5

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


5

ฉันคิดว่าคุณต้องใช้ความแข็งแรงในการจัดฟัน ในที่สุดพวกเขาจะกลายเป็นธรรมชาติที่สองสำหรับคุณและคุณจะสงสัยว่าคุณเคยมีชีวิตอยู่โดยปราศจากพวกเขา

ตรวจสอบให้แน่ใจว่ามีการเยื้องอย่างเหมาะสมและว่ามีการติดตามการเว้นวรรคบางส่วน (ไม่สำคัญว่า)


หนึ่งปีต่อมาและคำแนะนำนี้ดังขึ้นจริง :)
JDB ยังคงจำโมนิกา

4

ฉันลบการซ้อน 2 ระดับโดยการยุบเนมสเปซและขอบเขตของคลาสในแนวนอน ขอให้สังเกตวิธีการที่จะล้างด้วยขอบด้านซ้ายของหน้าจอ ฉันไม่เห็นจุดในการสูญเสียการเยื้อง 2 ระดับในทุกไฟล์

หลังจากนั้นก็หายากคุณจะต้องทำรังลึกมากกว่า 4 ระดับ

namespace FooNameSpace {
class Foo {

public void bar()
{
    while(true)
    {
        while(true)
        {
            break;
        }
    }
}

public void fooBar()
{
    foreach(var item in FooList)
    {
        foreach(var b in item.Bars)
        {
            if(b.IsReady)
            {
                bar();
            }
            bar();
        }
        bar();
    }
}

}}//end class, namespace

ฉันชอบความคิดนี้ แต่ Visual Studio ดูเหมือนจะไม่สนับสนุน (อย่างน้อยปี 2008 เรากำลังอัปเกรดเป็น 2012 ภายในสิ้นปีดังนั้นนี่คือความหวัง)
JDB ยังคงจดจำ Monica

@ Cyborgx37 ฉันแก้ไขข้อความภายนอกใน VIM ดังนั้นจึงไม่ใช่ปัญหา แต่ใน Visual Studio do: Control + A จากนั้นกดปุ่ม "เยื้องน้อยกว่า" ทำได้เฉพาะไฟล์ใหม่เท่านั้น อย่ากังวลกับไฟล์ที่มีอยู่เพราะมันจะทำให้การเปรียบเทียบต่างกันในการควบคุมซอร์ส
mike30

การพิมพ์ในวงเล็บปิด / วงเล็บปีกกาเริ่มรูปแบบอัตโนมัติโดย VS แต่คุณสามารถกด CTRL + z เพื่อปฏิเสธคำแนะนำได้
อเล็กซ์ในปารีส

1

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

  • คุณไม่ควรมีอะไรนอกจากโครงสร้างโค้ดโฟลว์ที่จำเป็น
  • คุณควรทำให้โค้ดโฟลว์สร้างเล็กที่สุดเท่าที่จะทำได้

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

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

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


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

@ Cyborgx37 จริง ๆ แล้วการใช้บล็อกสามารถถูกขีดเส้นใต้ได้ถ้าพวกมันซ้อนกันตามขอบเขตดูที่นี่stackoverflow.com/questions/1329739/…มันใช้งานได้เหมือนการควบคุมการไหลของบรรทัดเดียว คุณสามารถถ้า (จริง) ถ้า (someElse) ถ้า (otherThings) {doThis (); ทำอย่างนั้น(); ทำอะไรก็ได้(); } และรังของ ifs อย่างที่คุณคาดหวัง (อย่าเขียนรหัสเช่นนั้นเพื่อความรักของพระเจ้าเพียงแค่ทำสิ่งนี้ด้วยการใช้และไม่มีอะไรอื่น ๆ เลย)
Jimmy Hoffa

ใช่ฉันรู้เกี่ยวกับการทำรังโดยใช้บล็อก แต่จะทำงานได้ก็ต่อเมื่อคุณมีบรรทัดเดียวที่อยู่ด้านล่าง ในส่วนใหญ่ของรหัสของฉันนั่นไม่ใช่กรณี ยังเป็นโพสต์ที่มีประโยชน์มากโดยรวม ... เรียนรู้บางสิ่ง (+1)
JDB ยังจดจำโมนิก้า

@ Cyborgx37 ใช่ฉันรู้ว่าขอบเขตการทำรังทำงานได้เฉพาะเมื่อคุณไม่มีบิตเพิ่มเติมกล่าวคือมีรูปแบบการใช้งานของคุณหรือไม่? มันอาจจะเป็นไปได้ไหมที่จะย้ายส่วนเสริมนั้นไปยังตัวสร้างถ้ามันอยู่ด้านบนหรือการกำจัดถ้ามันอยู่ด้านล่าง? นั่นคือถ้ามันมีลวดลาย; คาดเดาว่าอาจเป็นเพราะคุณนำปัญหานี้มาใช้ดังนั้นคุณอาจพบปัญหาเหล่านี้โดยใช้รังในรหัสของคุณ
จิมมี่ฮอฟฟา

จริง ๆ แล้วฉันเริ่มทำงานกับการใช้งานรูปแบบโรงงานซึ่งล้อมวัตถุ COM ในคลาส "AutoCleanup" ฉันจะใช้usingคำสั่งเดียวในคลาสของโรงงานและเมื่อมันถูกกำจัดแล้วมันจะปิดคลาสที่ถูกห่อทั้งหมดโดยอัตโนมัติ มันทำงานได้ดีจนถึงปัจจุบันและลดจำนวนusingงบในรหัสของฉันลงอย่างมาก
JDB ยังคงจำโมนิก้า

1

นี่เป็นหนึ่งในสาเหตุที่เก่าแก่ที่สุดของสงครามในการคำนวณโชคไม่ดี อาร์กิวเมนต์ที่สมเหตุสมผลสามารถทำได้จากทั้งสองด้าน (เศรษฐกิจอสังหาริมทรัพย์ในแนวดิ่งที่ดีขึ้นเมื่อเทียบกับความสามารถที่ง่ายกว่าในการจับคู่วงเล็บปีกกาเปิดกับวงเล็บปีกกาปิด) แต่ในความเป็นจริงแล้วตัวจัดรูปแบบซอร์สโค้ดแบบง่าย ๆ MS Visual C # มีหนึ่งในตัวที่ใช้งานได้ดี

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

ดังนั้นในขณะที่คุณกำลังเรียนรู้หมายถึงการมุ่งเน้นไปที่สไตล์ที่ทำให้คุณเรียนรู้ได้ง่ายขึ้น แต่ให้จับตาดูอีกครึ่งหนึ่งขณะที่คุณอยู่ที่นี่และคุณจะทำได้ดี


1
ฉันไม่แน่ใจว่าเป็นฟอร์แมตเตอร์เริ่มต้นหรือบางอย่างใน ReSharper แต่เมื่อฉันใช้ C # เรามีชุดตัวเลือกที่ฟอร์แมตโค้ดใหม่เป็นส่วนหนึ่งของการเช็คอิน ด้วยวิธีนี้คุณสามารถจัดรูปแบบโค้ดได้ตามที่คุณต้องการในขณะที่ทำงานกับมัน แต่มันจะถูกฟอร์แมตใหม่เป็น "มาตรฐานโครงการ" เมื่อทำการเช็คอิน ฉันคิดว่ามาตรฐานการฟอร์แมตที่แท้จริงที่เรามีคือการใช้ช่องว่างแทนแท็บ
TMN

1

ใช้ Resharper ซึ่งจะช่วยแนะนำวิธีการลดการซ้อน นอกจากนี้อ่านClean Codeของ Bob Martin ซึ่งเน้นว่าฟังก์ชั่นควรทำสิ่งหนึ่งเท่านั้นดังนั้นแต่ละฟังก์ชันควรมีความยาวครึ่งโหลดังนั้นคุณจะไม่ต้องทำรังหลายระดับ


1

: มี add-on ที่จะแก้ไขที่อาจช่วยให้คุณที่เป็นC # โครงร่าง

ส่วนเสริมขยายตัวแก้ไข VS20xx สำหรับ C # โดยการเพิ่มคุณสมบัติเพื่อยุบขยายและไฮไลต์บล็อกที่ซ้อนกันของรหัส คุณสมบัติเหล่านี้ช่วยให้การแก้ไขและการอ่านเนื้อหาซ้อนของบล็อคโค้ดง่ายขึ้นเช่น if, while, ฯลฯ


0

หากคุณเขียนรหัสใน Visual Studio ก็มีปลั๊กอินที่แสดงจุดแนวตั้งระหว่างจุดเริ่มต้นและจุดสิ้นสุดของทุกโครงสร้างที่คุณสร้าง

แต่โดยรวมแล้วฉันคิดว่ามันจะใช้เวลาพอสมควรจนกว่าคุณจะคุ้นเคยกับ "Curly-Braces-Soup" (Btw ฉันชอบการแสดงออกนั้นฟังดูคล้ายกับชื่อตอนของทฤษฎีบิกแบง)


0

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

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

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

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

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

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

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


-1

หากคุณใช้ IDE เพียงกดCrtl+ k+ Dและ IDE จะทำงานที่เหลือ


IDE eclipse ใช้ ctrl-shift-i เพื่อเยื้องและ ctrl-shift-f สำหรับการจัดรูปแบบ
ratchet freak

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