ความแตกต่างระหว่างตัวแปรท้องถิ่นและระดับโลก
เนื้อหา
ดังที่เรากล่าวถึงก่อนหน้านี้ตัวแปรเป็นชื่อที่กำหนดให้กับตำแหน่งหน่วยความจำและจะต้องประกาศก่อนที่จะใช้ ใน C ตัวแปรทั้งหมดจะถูกประกาศเมื่อเริ่มต้นโปรแกรม ใน C ++ ตัวแปรสามารถประกาศ ณ เวลาใดก็ได้ก่อนที่จะใช้ในคำแนะนำ
ตัวแปรถูกจัดประเภทเป็น 'local' และ 'global' ซึ่งเป็นหัวข้อหลักของการสนทนาของเรา นี่คือความแตกต่างที่สำคัญระหว่างตัวแปรโลคอลและโกลบอลคือตัวแปรโลคัลถูกประกาศภายในบล็อกฟังก์ชัน ในทางตรงกันข้ามตัวแปรโกลบอลจะถูกประกาศนอกฟังก์ชั่นในโปรแกรม
มาศึกษาความแตกต่างระหว่างตัวแปรท้องถิ่นกับตัวแปรโกลบอลพร้อมกับกราฟเปรียบเทียบกัน
- แผนภูมิเปรียบเทียบ
- คำนิยาม
- ความแตกต่างที่สำคัญ
- ข้อดี
- ข้อเสีย
- ข้อสรุป
ตารางเปรียบเทียบ:
พื้นฐานสำหรับการเปรียบเทียบ | ตัวแปรท้องถิ่น | ตัวแปรทั่วโลก |
---|---|---|
การประกาศ | มีการประกาศตัวแปรภายในฟังก์ชัน | ตัวแปรจะถูกประกาศนอกฟังก์ชั่นใด ๆ |
ขอบเขต | ภายในฟังก์ชั่นภายในซึ่งพวกเขาจะประกาศ | ตลอดโปรแกรม |
ราคา | ตัวแปรท้องถิ่นที่ไม่ได้กำหนดค่าเริ่มต้นส่งผลให้เกิดการจัดเก็บค่าขยะ | ตัวแปรโกลบอลแบบไม่กำหนดค่าเริ่มต้นจะจัดเก็บศูนย์โดยค่าเริ่มต้น |
ทางเข้า | เข้าถึงได้โดยข้อความภายในฟังก์ชันที่มีการประกาศ | เข้าถึงได้ด้วยคำสั่งใด ๆ ในโปรแกรมทั้งหมด |
การแชร์ข้อมูล | ไม่ได้จัดเตรียมไว้ให้ | การอำนวยความสะดวก |
ชีวิต | สร้างเมื่อบล็อกฟังก์ชั่นถูกป้อนและทำลายเมื่อออก | ยังคงมีอยู่ตลอดเวลาที่โปรแกรมกำลังทำงาน |
การเก็บรักษา | ตัวแปรโลคัลถูกเก็บไว้บนสแต็กยกเว้นว่าระบุไว้ | เก็บไว้ในตำแหน่งที่แน่นอนโดยคอมไพเลอร์ |
ผ่านพารามิเตอร์ | จำเป็นอย่างยิ่ง | ไม่จำเป็นสำหรับตัวแปรโกลบอล |
การเปลี่ยนแปลงในค่าตัวแปร | การดัดแปลงใด ๆ ที่บอกเป็นนัยในตัวแปรโลคัลไม่ส่งผลกระทบต่อฟังก์ชันอื่นของโปรแกรม | การเปลี่ยนแปลงที่ใช้ในตัวแปรส่วนกลางของฟังก์ชั่นสะท้อนถึงการเปลี่ยนแปลงในโปรแกรมทั้งหมด |
นิยามของตัวแปรท้องถิ่น
ตัวแปรท้องถิ่น มีการประกาศเสมอในบล็อกฟังก์ชั่น ใน C ตัวแปรโลคัลถูกประกาศเมื่อเริ่มต้นบล็อกโค้ด ใน C ++ พวกเขาสามารถประกาศได้ทุกที่ในบล็อครหัสก่อนการใช้งาน ตัวแปรท้องถิ่นสามารถเข้าถึงได้โดยข้อความที่เขียนภายในฟังก์ชันซึ่งประกาศตัวแปรท้องถิ่นเท่านั้น พวกเขามีความปลอดภัยในแง่ที่ว่าพวกเขาไม่สามารถเข้าถึงได้โดยฟังก์ชั่นอื่น ๆ ของโปรแกรมเดียวกัน
มีตัวแปรโลคัลอยู่จนกระทั่งบล็อกของฟังก์ชันนั้นทำงานและถูกทำลายหลังจากการทำงานออกจากบล็อก ตัวแปรท้องถิ่นสูญเสียเนื้อหาของพวกเขาทันทีที่การดำเนินการออกจากบล็อกที่มีการประกาศ
เหตุผลเบื้องหลังคือตัวแปรโลคัลถูกเก็บไว้บนสแต็กยกเว้นว่ามีการระบุที่เก็บข้อมูลพิเศษ สแต็กเป็นแบบไดนามิกในลักษณะและการเปลี่ยนแปลงในตำแหน่งหน่วยความจำนำไปสู่สาเหตุที่ตัวแปรท้องถิ่นไม่ถือค่าของพวกเขาทันทีที่บล็อกของฟังก์ชั่นที่มีอยู่
บันทึก:
อย่างไรก็ตามมีวิธีการรักษาค่าของตัวแปรท้องถิ่นโดยใช้ตัวปรับเปลี่ยน 'คงที่'
ความหมายของตัวแปรทั่วโลก
ตัวแปรทั่วโลก ถูกประกาศนอกฟังก์ชั่นทั้งหมดที่มีอยู่ในโปรแกรม ไม่เหมือนกับตัวแปรโลคัลตัวแปรโกลบอลสามารถเข้าถึงได้โดยฟังก์ชันใด ๆ ที่มีอยู่ในโปรแกรม ตัวแปรทั่วโลกไม่น่าเชื่อถือมากเนื่องจากค่าสามารถเปลี่ยนแปลงได้โดยฟังก์ชั่นใด ๆ ที่มีอยู่ในโปรแกรม
พวกเขายังคงอยู่จนกว่าโปรแกรมทั้งหมดจะถูกดำเนินการอย่างสมบูรณ์ ตัวแปรโกลบอลจะเก็บค่าไว้จนกว่าโปรแกรมจะทำงาน เหตุผลก็คือพวกเขาจะถูกเก็บไว้ในพื้นที่คงที่ของหน่วยความจำตัดสินใจโดยคอมไพเลอร์
ตัวแปรทั่วโลกมีประโยชน์ในสถานการณ์ที่หลายฟังก์ชั่นเข้าถึงข้อมูลเดียวกัน การใช้ตัวแปรโกลบอลจำนวนมากอาจเป็นปัญหาเนื่องจากอาจมีการเปลี่ยนแปลงที่ไม่ต้องการกับค่าของตัวแปรโกลบอล
- ตัวแปรในตัวเครื่องถูกเรียกว่า 'local' เพราะพวกมันเป็นที่รู้จักกันเฉพาะในคำสั่งที่เขียนในฟังก์ชั่นที่พวกเขาจะประกาศและไม่รู้จักฟังก์ชั่นอื่น ๆ ที่อยู่นอกฟังก์ชั่นบล็อก ในกรณีของตัวแปรโกลบอลพวกมันจะรู้จักฟังก์ชันทุกตัวที่อยู่ในโปรแกรม ดังนั้นจึงถูกเรียกว่า "ทั่วโลก"
- ตัวแปรโกลบอลจะเก็บค่าของมันไว้จนกว่าโปรแกรมจะอยู่ในช่วงการเรียกใช้งานเนื่องจากจะถูกเก็บไว้ในตำแหน่งคงที่ซึ่งคอมไพเลอร์ตัดสินใจ ตัวแปรโลคัลถูกเก็บไว้บนสแต็ก ดังนั้นพวกเขาจะไม่เก็บค่าของพวกเขาเป็น 'กองซ้อน' เป็นแบบไดนามิกในธรรมชาติ แต่คอมไพเลอร์สามารถถูกนำไปรักษามูลค่าของพวกเขาโดยใช้ตัวแก้ไข 'คงที่'
- หากมีการประกาศตัวแปรโกลบอลและโลคัลด้วยชื่อเดียวกันคำสั่งทั้งหมดของบล็อกโค้ดที่ประกาศตัวแปรโลคัลจะอ้างถึงตัวแปรโลคัลและจะไม่มีผลกระทบกับตัวแปรโกลบอล
- ตัวแปรโลคัลถูกทำลายเมื่อการควบคุมของโปรแกรมออกจากบล็อกที่ประกาศตัวแปรท้องถิ่น อย่างไรก็ตามตัวแปรโกลบอลจะถูกทำลายเมื่อโปรแกรมทั้งหมดถูกยกเลิก
ข้อดี
ตัวแปรท้องถิ่น
- ประโยชน์หลักของตัวแปรท้องถิ่นคือไม่มีการเปลี่ยนแปลงข้อมูลโดยไม่ตั้งใจ ตัวแปรถูกประกาศในบล็อกและบล็อกของรหัสเหล่านี้ใช้ตัวแปรและหลีกเลี่ยงผลข้างเคียงที่ไม่พึงประสงค์
- ตัวแปรโลคัลใช้หน่วยความจำตามระยะเวลาที่ จำกัด เฉพาะเมื่อบล็อกที่มีตัวแปรนั้นทำงาน
ตัวแปรทั่วโลก
- ตัวแปรทั่วโลกมีประโยชน์มากเมื่อคุณจัดการกับฟังก์ชั่นต่าง ๆ ในโปรแกรมจัดการข้อมูลเดียวกัน
- การเปลี่ยนแปลงที่จำเป็นต้องใช้ในโปรแกรมทั้งหมดจะทำได้ง่ายขึ้นด้วยการใช้ตัวแปรทั่วโลก
- เราสามารถเข้าถึงได้จากทุกที่หรือผ่านฟังก์ชั่นแบบสุ่มของโปรแกรม
ข้อเสีย
ตัวแปรท้องถิ่น
- ขอบเขตของตัวแปรโลคัลถูก จำกัด
- ห้ามการแบ่งปันข้อมูล
- พวกเขาไม่สามารถเก็บข้อมูลระหว่างการโทรเพราะตัวแปรท้องถิ่นจะถูกสร้างขึ้นและลบออกด้วยแต่ละรายการและออกจากบล็อก อย่างไรก็ตามตัวแก้ไขแบบคงที่สามารถใช้เพื่อรักษาค่า
ตัวแปรทั่วโลก
- การใช้ตัวแปรโกลบอลจำนวนมากอาจส่งผลให้เกิดข้อผิดพลาดของโปรแกรม
- ปัญหาหลักที่ทำให้เกิดคือการเปลี่ยนแปลงโดยไม่ตั้งใจเนื่องจากตัวแปรทั่วโลกที่เผยแพร่ตลอดโปรแกรม
- นอกจากนี้ยังสามารถเพิ่มความจำเป็นในการดำเนินการ refactoring รหัสซึ่งเป็นกระบวนการที่กว้างขวางมากซึ่งรหัสโปรแกรมทั้งหมดจะถูกปรับโครงสร้าง
สรุป:
ตัวแปรท้องถิ่นและระดับโลกมีความจำเป็นและต้องการเท่ากันในขณะที่เขียนโปรแกรม อย่างไรก็ตามการประกาศตัวแปรทั่วโลกจำนวนมากอาจเป็นปัญหาในโปรแกรมขนาดใหญ่เนื่องจากอาจทำให้เกิดการเปลี่ยนแปลงที่ไม่ต้องการกับตัวแปรทั่วโลก และมันก็ยากที่จะระบุว่าส่วนใดของโปรแกรมที่ทำการเปลี่ยนแปลงนั้น ดังนั้นหนึ่งควรหลีกเลี่ยงการประกาศตัวแปรทั่วโลกที่ไม่จำเป็น