สวัสดี ยินดีต้อนรับกลับมา
ในการบรรยายครั้งนี้ ฉันอยากจะพูด เกี่ยวกับตัวแปรท้องถิ่นและระดับโลก
นี่คือแนวคิดของฟังก์ชันจริงๆ ขอบเขตหรือในขอบเขตโปรแกรมทั่วไป
มันเกี่ยวข้องกับเมื่อ คุณสามารถใช้ตัวแปรและเมื่อคุณไม่สามารถใช้งานได้
เรารู้ว่าหน้าที่คืออะไร
ตอนนี้ฉันอยากคุย เกี่ยวกับตัวแปรท้องถิ่น
ตัวแปรท้องถิ่นต้องทำจริงๆ ที่มากกว่าแค่ฟังก์ชัน
ตัวแปรโลคัลเกี่ยวข้องกับ อะไรก็ได้ที่มีบล็อกของรหัส
ดังนั้นตัวแปรที่กำหนดไว้ภายใน ของฟังก์ชันเรียกว่าตัวแปรโลคัลอัตโนมัติ
ดังนั้นในหน้าที่การงานนั้น ในระหว่าง วงเล็บเริ่มต้นและสิ้นสุดเหล่านั้น
ถ้าคุณประกาศตัวแปร นั่น ตัวแปรเป็นตัวแปรท้องถิ่น
มันจะถูกสร้างขึ้นโดยอัตโนมัติ ทุกครั้งที่มีการเรียกใช้ฟังก์ชัน
นอกจากนี้ ค่าใดๆ ใน การเข้าถึงตัวแปรนั้นเป็นแบบโลคัลสำหรับฟังก์ชันเท่านั้น
คุณไม่สามารถเข้าถึงตัวแปรนั้นได้ นอกเหนือหน้าที่นั้น
จึงไม่สามารถเข้าถึงตัวแปรได้ ในฟังก์ชันอื่นๆ หากเป็นฟังก์ชันเฉพาะในเครื่อง
เข้าถึงได้เท่านั้น จากที่มันถูกกำหนดไว้
หากได้รับค่าเริ่มต้น ให้กับตัวแปรภายในฟังก์ชัน
ค่าเริ่มต้นนั้นคือ กำหนดให้กับตัวแปรทุกครั้งที่มีการเรียกใช้ฟังก์ชัน
หากคุณต้องการรักษามูลค่าใน ตัวแปรทุกครั้งที่มีการเรียก จริงๆ
แล้วมีวิธีที่คุณสามารถทำได้ ใน c เรียกว่าเป็นตัวแปรคงที่ภายในฟังก์ชัน
นั่นคือขั้นสูงอีกครั้ง แนวคิดไม่ได้อยู่ในชั้นเรียนเริ่มต้น
แต่เป็นวิธีที่คุณสามารถ มีข้อมูลที่แตกต่างกันทุกครั้งที่คุณเรียกใช้ฟังก์ชัน
ดังนั้นหากต้องการยกตัวอย่างเช่น keep ตัวนับจำนวนครั้งที่เรียกใช้ฟังก์ชัน
คุณจะประกาศ a ตัวแปรโลคัลภายในชื่อฟังก์ชันนั้นคงที่พร้อมคีย์เวิร์ดสแตติก
แต่ไม่ธรรมดา ตัวแปรท้องถิ่นจะมีค่าใหม่ทุกครั้ง
คุณสามารถใช้คำสำคัญอัตโนมัติก่อน ชนิดข้อมูลแต่ไม่จำเป็น
มันทำให้ it แม่นยำขึ้นเล็กน้อย
คอมไพเลอร์จะเพิ่มโดย ค่าเริ่มต้นหากคุณไม่ได้รวมไว้
แต่ถ้าใส่เข้าไปก็ แค่จะทำให้แม่นยำขึ้นก็ไม่จำเป็น
จึงเรียกว่า ตัวแปรท้องถิ่นอัตโนมัติ
มีคีย์เวิร์ดชื่อ auto ใน c, แต่คุณไม่จำเป็นต้องระบุโดยค่าเริ่มต้น
และนั่นเป็นเหตุผล คุณไม่เห็นมันในตัวอย่างมากมายที่มีการกำหนดตัวแปร
และประกาศภายในฟังก์ชัน
ตัวแปรโลคัลยังใช้ได้กับ รหัสใด ๆ ที่ตัวแปรถูกสร้างขึ้นในคำสั่ง
block, loops หรือ if
อีกครั้งถ้าคุณมีคำสั่ง if ใน อะไรคือบล็อกสำหรับคำสั่ง if เป็นเพียงจุดเริ่มต้นของวงเล็บ
ที่เรียกว่าบล็อก
บล็อกสามารถอยู่ในฟังก์ชั่น บล็อกสามารถเป็นคำสั่งได้หากบล็อกสามารถอยู่ในลูปได้
บล็อกได้ทุกที่ที่ มีวงเล็บเป็นหลัก
ทุกที่ที่มีวงเล็บ และคุณสร้างตัวแปรนั้น
กำลังประกาศการสร้างตัวแปร มันและอาจกำหนดค่าให้กับมัน
แต่ถ้าคุณประกาศตัวแปรนั้น คุณสร้างตัวแปรนั้นภายในบล็อก
คุณสามารถใช้ได้เพียง ตัวแปรที่อยู่ในบล็อกนั้น
หากคุณพยายามเข้าถึงสิ่งนั้น ตัวแปรนอกบล็อกจะไม่ถูกใช้งาน
ดังนั้นถ้าคุณมีคำสั่ง if ภายในคำสั่ง if ที่คุณประกาศตัวแปร
คุณสามารถเข้าถึง ตัวแปรนั้นนอกบล็อกคำสั่ง if เช่นเดียวกับลูป
มันเป็นสิ่งสำคัญมาก ที่จะเข้าใจสิ่งนี้
คอมไพเลอร์กำลังจะบ่น และแสดงข้อผิดพลาดหากคุณพยายามเข้าถึงจากที่อื่น
และความหมายก็คือ ค่าในข้อมูลใช้ได้กับบล็อกนั้นเท่านั้น
คุณไม่ได้แชร์ข้อมูลใดๆ
ตัวแปรโกลบอลคือ ตรงข้ามกับตัวแปรท้องถิ่น
ตัวแปรส่วนกลางสามารถเข้าถึงได้ โดยฟังก์ชันใด ๆ ในโปรแกรม
วิธีที่คุณสร้างโลก ตัวแปรคือคุณวางไว้ที่ด้านบนสุดนอกฟังก์ชันใด
ๆ
จึงมีการประกาศตัวแปรทั่วโลก นอกฟังก์ชันและไม่อยู่ในฟังก์ชันใดๆ
โปรดจำไว้ว่าคำหลัก หลักคือฟังก์ชัน
ดังนั้นตัวแปรใด ๆ ที่กำหนดไว้ใน ฟังก์ชันหลักสามารถเข้าถึงได้ในฟังก์ชันหลักเท่านั้น
ดังนั้นตัวแปรในหลัก ไม่สามารถเข้าถึงฟังก์ชันอื่นๆ
ได้
หากคุณต้องการตัวแปรที่ ใช้โดยฟังก์ชันทั้งหมด คุณวางตัวแปรไว้นอกฟังก์ชัน
มักจะอยู่ด้านบนของไฟล์ต้นฉบับและมักจะทำเครื่องหมายเป็น
บอกว่านี่เป็นตัวแปรระดับโลก
ตัวแปรทั่วโลกเป็นเรื่องโกหกสำหรับ ความสมบูรณ์ของโปรแกรมตั้งแต่เมื่อโปรแกรมเริ่มจนถึงเมื่อ
มันหยุดลง ตัวแปรโกลบอลนั้นจะอยู่ในหน่วยความจำ
ฟังก์ชันใดก็ได้ในโปรแกรมสามารถ เปลี่ยนค่าของตัวแปรโกลบอลนั้นเพราะมี เข้าไปแก้ไขได้
ดังนั้นคุณควรเริ่มคิด เกี่ยวกับว้าวที่ดูอันตรายเพราะตอนนี้คุณมี รหัสที่สามารถเข้าถึงข้อมูลเดียวกันได้ทุกที่
แต่เราจะไปที่นั้น
หากมีการประกาศตัวแปรท้องถิ่น ในฟังก์ชันที่มีชื่อเดียวกับตัวแปรส่วนกลาง
แล้วนั้น ฟังก์ชั่นจะใช้ตัวแปรโลคัล มันจะปิดบังตัวแปรโกลบอล
ดังนั้นถ้าคุณมีตัวแปรโกลบอลชื่อ x และคุณมีตัวแปรท้องถิ่นชื่อ
x ภายในฟังก์ชัน local ตัวแปรจะมีความสำคัญกว่า
จะไม่ดัดแปลง ข้อมูลตัวแปรส่วนกลาง
หากคุณมอบหมายให้สิ่งนั้น ตัวแปร มันจะแก้ไขเฉพาะตัวแปรท้องถิ่นเท่านั้น
ดังนั้นตัวแปรโกลบอลจึงไม่ใช่ เข้าถึงได้เมื่อคุณมีชื่อเดียวกัน
และจริงๆ แล้วจะไม่ สามารถเข้าถึงได้ภายในฟังก์ชันท้องถิ่นนั้น ดังนั้นอย่าใช้ตัวเดียวกัน
ชื่อโดยพื้นฐานแล้วเพราะมันจะทำให้สับสน
สำหรับคนที่ลงโปรแกรมไว้ โปรแกรมเมอร์ขั้นสูงจำนวนมาก พวกเขาสังเกตเห็นสิ่งนี้ในทันที
พวกเขาจะพูดว่าเฮ้แค่นี้ ทำหน้าที่เพียงแค่ปรับเปลี่ยนตัวแปรท้องถิ่นแม้ว่าพวกเขาจะเห็นa
กริยาสากลที่มีชื่อเดียวกัน
แต่สำหรับผู้เริ่มต้น มันคือ ไม่ชัดเจนมาก
ผมขอยกตัวอย่าง
ในตัวอย่างนี้ เราคือ การสร้างตัวแปรส่วนกลางที่ด้านบนสุดก่อนฟังก์ชันหลัก
และแบบที่อยากจัด โปรแกรมของคุณมักจะให้คุณใส่ข้อความที่ด้านบนหลัง
some อาจจะแสดงความคิดเห็น แล้วคุณอาจมีค่าคงที่ที่กำหนดไว้ แล้วคุณ จะมีตัวแปรทั่วโลกของคุณ
ตัวแปรโกลบอลดูเฉยๆ เหมือนตัวแปรปกติ
มันเป็นที่ที่พวกเขาอยู่ ประกาศจริงๆ
หากประกาศนอก เป็นฟังก์ชันสากล
ในตัวอย่างนี้ เรามี ตัวแปรโกลบอลที่เรียกว่าโกลบอลของฉัน
เรากำลังเริ่มต้นให้เป็น 0
นอกจากนี้เรายังสามารถเริ่มต้นสิ่งเหล่านี้ได้ ตัวแปรทั่วโลกได้ทุกที่
เราสามารถเริ่มต้นได้เมื่อ เราประกาศพวกเขาหรือเราสามารถเริ่มต้นพวกเขาในฟังก์ชั่นใดก็ได้
มันเป็นจำนวนเต็ม
เรายังมีสองหน้าที่คือ ฟังก์ชันหลักในฟังก์ชันที่เรียกว่าฟังก์ชันของฉัน
ข้างในมีของท้องถิ่น ตัวแปรที่สามารถเข้าถึงได้ภายในฟังก์ชันเหล่านั้นเท่านั้น
ในหน้าที่หลักคือ เรามีหลักท้องถิ่นของฉัน
คุณสามารถเข้าถึงได้เฉพาะในพื้นที่ของฉัน main ภายในฟังก์ชั่นหลัก
แต่เนื่องจากโกลบอลของฉันคือตัวแปร ที่เป็นสากล คุณยังสามารถเข้าถึงสิ่งนั้นได้ในฟังก์ชันหลัก
ดังนั้นหลักสามารถเข้าถึงสอง ตัวแปรท้องถิ่นและระดับโลก
และฟังก์ชั่นของฉันมีตัวแปรท้องถิ่น ชื่อ x เพราะมันประกาศอยู่ในวงเล็บของฟังก์ชัน
body และเราสามารถเข้าถึงตัวแปรโกลบอลซึ่งเป็นโกลบอลของฉันได้
เรายังสามารถเข้าถึง x ได้ แต่ เราไม่สามารถเข้าถึงท้องถิ่นของฉัน
หลักท้องถิ่นของฉันฉันควรจะพูด
เพราะหลักท้องถิ่นของฉันเท่านั้น ภายในฟังก์ชั่นหลัก
เราไม่สามารถเข้าถึงสิ่งนั้นได้
ถ้าเราลองเขียนหรืออ่าน my ตัวแปรหลักในพื้นที่ภายในฟังก์ชันของฉัน
คอมไพเลอร์คือ จะทำให้คุณมีข้อผิดพลาด
ต้องเข้าใจสิ่งนี้ แนวคิดของท้องถิ่นกับระดับโลก
โลคัลอยู่ในกลุ่มโค้ด
เมื่อประกาศแล้ว คุณสามารถ ใช้เฉพาะในบล็อกเท่านั้น
หากตัวแปรอยู่นอกบล็อก และมันอยู่ในฟังก์ชันหรือแค่ในโปรแกรมเอง
คุณสามารถเข้าถึงได้ในทุกฟังก์ชัน
ควรหลีกเลี่ยงตัวแปรทั่วโลก
ตัวแปรโกลบอลคือ ชนิดของสิ่งที่ไม่ดี
เหตุผลสำหรับพวกเขาทั่วโลก ตัวแปรที่ไม่ดีและทำไมคุณควรหลีกเลี่ยงก็เพราะมัน
ส่งเสริมการมีเพศสัมพันธ์ระหว่างฟังก์ชัน
การมีเพศสัมพันธ์หมายถึงอะไร?
การมีเพศสัมพันธ์หมายถึงการพึ่งพา
หากคุณมีตัวแปรส่วนกลาง และมันถูกใช้งานโดยฟังก์ชันสี่อย่าง
นั่นคือแต่ละอัน ของฟังก์ชันเหล่านั้นอาจขึ้นอยู่กับฟังก์ชันอื่น
มีอะไรผิดปกติกับการพึ่งพาอาศัยกัน?
การพึ่งพาอาศัยกันทำให้โปรแกรมเป็น ยากกว่ามากในการดีบักและค้นหาข้อผิดพลาด
หากคุณมีข้อบกพร่องในโปรแกรมของคุณ และคุณกำลังใช้ตัวแปรส่วนกลางและตัวแปรส่วนกลางทำให้เกิด
บั๊ก ในตอนนี้ บั๊กนั้นอาจอยู่ที่ใดก็ได้ในฟังก์ชันใดๆ นั่นคือ โดยใช้ตัวแปรโกลบอลนั้น
มันซับซ้อน เมื่อคุณมีข้อมูลทั่วโลก
คุณมีตัวแปรโกลบอลก็สามารถทำได้ ปรับเปลี่ยนในฟังก์ชันหนึ่ง ฟังก์ชันสอง
ฟังก์ชันสาม ฟังก์ชันที่สี่
คุณไม่ได้จำกัดการเข้าถึงสิ่งนั้น มันยากมากเช่นกันเมื่อคุณพบข้อผิดพลาดและ
คุณแยกมันออก มันอาจจะยากมากที่จะแก้ไขมัน
เพราะตอนนี้เมื่อแก้ไขแล้วอาจ ทำให้เกิดปัญหาในหน้าที่อื่นเนื่องจากการขึ้นต่อกันเหล่านี้
ตัวแปรโกลบอลควรเป็น หลีกเลี่ยงให้มากที่สุดเนื่องจากการมีเพศสัมพันธ์นี้
เนื่องจากการพึ่งพาเหล่านี้
มีบางครั้งที่คุณอาจต้องการ ที่จะใช้ แต่คุณควรหลีกเลี่ยง
และจำไว้ให้ขึ้นใจมากที่สุด ภาษาสมัยใหม่ในภาษาเชิงวัตถุส่วนใหญ่
เช่น c++ และ java ไม่มีแม้แต่แนวคิดของตัวแปรโกลบอล
พวกเขามีตัวแปรคงที่ซึ่ง สามารถเป็นตัวแปรคลาสได้ แต่ก็ยังถูกห่อหุ้มอยู่ภายในคลาส
เพราะข้อมูลทั่วโลกเป็นเช่นนั้น สิ่งที่ไม่ดี ภาษาใหม่พยายามห้ามจริงๆ
และคุณควรพยายามหลีกเลี่ยง เพราะมันทำให้โปรแกรมของคุณซับซ้อนและทำให้มัน
ค้นหาและแก้ไขข้อผิดพลาดได้ยากขึ้น
แทนที่จะใช้ global data ส่งข้อมูลไปยังฟังก์ชัน
หากฟังก์ชันจำเป็นต้องเข้าถึง ข้อมูลบางส่วน ส่งต่อไปยังข้อมูลนั้น
ถ้า -- ถ้าเป็นข้อมูลจำนวนมากและคุณทำไม่ได้ ต้องการมีพารามิเตอร์มากมาย
ในทางทฤษฎี คุณไม่ควรจริงๆ มีพารามิเตอร์มากกว่าห้าตัว
มีหนังสือดีๆ เล่มหนึ่งที่เรียกว่า โค้ดสะอาดที่พูดถึงคุณภาพของโค้ดและสิ่งที่ควรหลีกเลี่ยง
สิ่งที่ควรหลีกเลี่ยงเช่นตัวแปรส่วนกลาง
นอกจากนี้ยังพูดถึงวิธีการ พารามิเตอร์มากมายที่คุณควรมีในฟังก์ชันของคุณ
และถ้าฟังก์ชันมีพารามิเตอร์ 20 ตัว มันเป็นสัญญาณว่ามีบางอย่างผิดปกติ
สาเหตุหลักมาจากฟังก์ชันนั้น คงจะทำเกินไป
แต่ฟังก์ชั่นสามารถเข้าถึงข้อมูลได้ โดยเพียงแค่ส่งข้อมูลไปที่มัน และคุณสามารถจำกัดการใช้ข้อมูลทั่วโลกได้
และสำหรับฟังก์ชั่นที่ใช้เวลามาก data คุณสามารถใช้สิ่งที่เรียกว่า
struct ซึ่งเราไม่ได้พูดถึง แต่นั่นเป็นอีกวิธีหนึ่งในการทำเช่นนั้น
ดังนั้นอย่าใช้ข้อมูลทั่วโลกมากนัก เท่าที่จะทำได้เมื่อจำเป็นเท่านั้น
ให้แน่ใจว่าคุณเข้าใจรหัส
ตรวจสอบให้แน่ใจว่าคุณเอกสาร มันดีจริงๆ
เพื่อให้คนอื่นมอง ที่รหัสรู้ทันทีว่าคุณกำลังใช้ข้อมูลทั่วโลก
และรู้ว่าทุกอย่างทำงานอย่างไร
นี่คือแนวคิดของขอบเขตฟังก์ชัน
คุณต้องเข้าใจสิ่งนี้ ดังนั้นจงใส่ใจกับสไลด์เหล่านี้ทั้งหมด
และเราจะใช้บางอย่างเช่นกัน ข้อมูลทั่วโลกและข้อมูลท้องถิ่นบางส่วนในการท้าทายครั้งต่อไปของเรา
ขอขอบคุณ.