ความแตกต่างระหว่างตัวแปรท้องถิ่นและระดับโลก
ความแตกต่างที่สำคัญระหว่างตัวแปรท้องถิ่นและตัวแปรส่วนกลาง
- มีการประกาศตัวแปรท้องถิ่นภายในฟังก์ชัน ในขณะที่ตัวแปร Global ได้รับการประกาศนอกฟังก์ชัน
- ตัวแปรท้องถิ่นจะถูกสร้างขึ้นเมื่อฟังก์ชันเริ่มดำเนินการ และจะหายไปเมื่อฟังก์ชันยุติ ในทางกลับกัน ตัวแปรส่วนกลางจะถูกสร้างขึ้นเมื่อการดำเนินการเริ่มต้น และจะหายไปเมื่อโปรแกรมสิ้นสุด
- ตัวแปรภายในเครื่องไม่มีการแบ่งปันข้อมูล ในขณะที่ตัวแปร Global จัดให้มีการแบ่งปันข้อมูล
- ตัวแปรโลคัลจะถูกจัดเก็บไว้ในสแต็ก ในขณะที่ตัวแปรโกลบอลจะถูกจัดเก็บไว้ในตำแหน่งคงที่ซึ่งคอมไพลเลอร์เป็นผู้กำหนด
- จำเป็นต้องมีการส่งพารามิเตอร์สำหรับตัวแปรภายในเครื่อง แต่ไม่จำเป็นสำหรับตัวแปรส่วนกลาง
ตัวแปรคืออะไร?
ตัวแปรคือชื่อที่กำหนดให้กับพื้นที่จัดเก็บข้อมูลที่โปรแกรมสามารถจัดการได้ ประเภทของตัวแปรจะกำหนดขนาดและรูปแบบของหน่วยความจำของตัวแปร
นอกจากนี้ยังกำหนดช่วงค่าที่จะต้องจัดเก็บไว้ภายในหน่วยความจำนั้นและลักษณะของการดำเนินการที่สามารถนำไปใช้กับตัวแปรนั้นได้
ขอบเขตของตัวแปร
ขอบเขตของตัวแปรเป็นเพียงอายุการใช้งานของตัวแปร มันคือบล็อกของโค้ดที่ตัวแปรสามารถใช้ได้หรือยังมีชีวิตอยู่ ตัวอย่างเช่น:
function foo(){ var x; }
คุณประกาศตัวแปร “x” ภายในฟังก์ชัน “foo” ขอบเขตของตัวแปรนั้นยังคงอยู่ในฟังก์ชันที่ไม่สามารถใช้นอกฟังก์ชันนั้นได้
มีสามตำแหน่งที่คุณสามารถประกาศภาษาโปรแกรมตัวแปรได้:
- ภายในฟังก์ชันหรือบล็อก: ตัวแปรท้องถิ่น
- นอกเหนือจากฟังก์ชันทั้งหมด: ตัวแปรโกลบอล
- ในคำจำกัดความของพารามิเตอร์ฟังก์ชัน: พารามิเตอร์ที่เป็นทางการ
ตัวแปรท้องถิ่น
ตัวแปรท้องถิ่น ถูกกำหนดให้เป็นประเภทของตัวแปรที่ประกาศไว้ในบล็อกโปรแกรมหรือซับรูทีน สามารถใช้ได้เฉพาะภายในซับรูทีนหรือบล็อกโค้ดที่ประกาศไว้เท่านั้น ตัวแปรภายในจะคงอยู่จนกว่าบล็อกของฟังก์ชันจะทำงาน หลังจากนั้นจะทำลายโดยอัตโนมัติ
ตัวอย่างของตัวแปรท้องถิ่น
public int add(){ int a =4; int b=5; return a+b; }
ที่นี่ 'a' และ 'b' เป็นตัวแปรท้องถิ่น
ตัวแปรทั่วโลก
A ตัวแปรทั่วโลก ในโปรแกรมจะเป็นตัวแปรที่กำหนดนอกรูทีนย่อยหรือฟังก์ชัน มีขอบเขตทั่วโลกหมายความว่าจะรักษาคุณค่าไว้ตลอดอายุของโปรแกรม ดังนั้นจึงสามารถเข้าถึงได้ทั่วทั้งโปรแกรมด้วยฟังก์ชันใดๆ ที่กำหนดไว้ภายในโปรแกรม เว้นแต่จะมีการบังไว้
ตัวอย่าง:
int a =4; int b=5; public int add(){ return a+b; }
ที่นี่ 'a' และ 'b' เป็นตัวแปรร่วม
ตัวแปรโลคัลเทียบกับตัวแปรโกลบอล
นี่คือความแตกต่างพื้นฐานบางประการระหว่างตัวแปร Local และ Global
พารามิเตอร์ | องถิ่น | เหตุการณ์ที่ |
---|---|---|
ขอบเขต | มีการประกาศไว้ภายในฟังก์ชัน | มีการประกาศนอกฟังก์ชัน |
ความคุ้มค่า | หากไม่ได้เตรียมใช้งาน ค่าขยะจะถูกจัดเก็บ | หากไม่ได้เตรียมใช้งาน ศูนย์จะถูกเก็บไว้เป็นค่าเริ่มต้น |
ตลอดชีวิต | มันถูกสร้างขึ้นเมื่อฟังก์ชันเริ่มดำเนินการและหายไปเมื่อฟังก์ชันยุติ | มันถูกสร้างขึ้นก่อนที่การดำเนินการทั่วโลกของโปรแกรมจะเริ่มต้นและหายไปเมื่อโปรแกรมยุติ |
การแชร์ข้อมูล | ไม่สามารถแบ่งปันข้อมูลได้เนื่องจากข้อมูลของตัวแปรภายในเครื่องสามารถเข้าถึงได้ด้วยฟังก์ชันเดียวเท่านั้น | การแบ่งปันข้อมูลเป็นไปได้เนื่องจากหลายฟังก์ชันสามารถเข้าถึงตัวแปรส่วนกลางเดียวกันได้ |
พารามิเตอร์ | จำเป็นต้องมีการส่งพารามิเตอร์เพื่อให้ตัวแปรท้องถิ่นเข้าถึงค่าในฟังก์ชันอื่น | การส่งพารามิเตอร์ไม่จำเป็นสำหรับตัวแปรร่วมเนื่องจากสามารถมองเห็นได้ทั่วทั้งโปรแกรม |
การปรับเปลี่ยนค่าตัวแปร | เมื่อมีการแก้ไขค่าของตัวแปรท้องถิ่นในฟังก์ชันหนึ่ง การเปลี่ยนแปลงจะไม่สามารถมองเห็นได้ในฟังก์ชันอื่น | เมื่อค่าของตัวแปรโกลบอลถูกแก้ไขในฟังก์ชันหนึ่ง การเปลี่ยนแปลงจะปรากฏในส่วนที่เหลือของโปรแกรม |
เข้าถึงได้โดย | ตัวแปรท้องถิ่นสามารถเข้าถึงได้โดยใช้คำสั่งภายในฟังก์ชันที่มีการประกาศตัวแปรเหล่านั้น | คุณสามารถเข้าถึงตัวแปรโกลบอลได้ด้วยคำสั่งใดๆ ในโปรแกรม |
การจัดเก็บหน่วยความจำ | มันถูกเก็บไว้ในสแต็กเว้นแต่จะระบุไว้ | มันถูกเก็บไว้ในตำแหน่งคงที่ซึ่งตัดสินใจโดยคอมไพเลอร์ |
ข้อดีของการใช้ตัวแปรโกลบอล
- คุณสามารถเข้าถึงตัวแปรโกลบอลได้จากฟังก์ชันหรือโมดูลทั้งหมดในโปรแกรม
- คุณจะต้องประกาศตัวแปรโกลบอลเพียงครั้งเดียวนอกโมดูล
- เหมาะอย่างยิ่งสำหรับการจัดเก็บ "ค่าคงที่" เนื่องจากช่วยให้คุณรักษาความสม่ำเสมอได้
- ตัวแปร Global มีประโยชน์เมื่อหลายฟังก์ชันเข้าถึงข้อมูลเดียวกัน
ข้อดีของการใช้ตัวแปรท้องถิ่น
- การใช้ตัวแปรภายในเครื่องรับประกันว่าค่าของตัวแปรจะยังคงไม่เปลี่ยนแปลงในขณะที่งานกำลังทำงานอยู่
- หากงานหลายงานเปลี่ยนแปลงตัวแปรตัวเดียวที่กำลังทำงานพร้อมกัน ผลลัพธ์อาจไม่สามารถคาดเดาได้ แต่การประกาศให้เป็นตัวแปรท้องถิ่นจะช่วยแก้ปัญหานี้ได้ เนื่องจากงานแต่ละงานจะสร้างอินสแตนซ์ของตัวแปรท้องถิ่นของตัวเอง
- คุณสามารถตั้งชื่อตัวแปรท้องถิ่นให้เหมือนกันในฟังก์ชันต่างๆ ได้ เนื่องจากตัวแปรจะรับรู้โดยฟังก์ชันที่ประกาศไว้เท่านั้น
- ตัวแปรในเครื่องจะถูกลบทันทีที่ฟังก์ชันใดๆ สิ้นสุดลง และปล่อยพื้นที่หน่วยความจำที่ฟังก์ชันนั้นครอบครอง
ข้อเสียของการใช้ตัวแปรโกลบอล
- มีตัวแปรที่ประกาศเป็นตัวแปรมากเกินไป ตัวแปรนั้นจะยังคงอยู่ในหน่วยความจำจนกว่าการทำงานของโปรแกรมจะเสร็จสิ้น นี่อาจทำให้เกิดปัญหาหน่วยความจำไม่เพียงพอ
- ข้อมูลสามารถแก้ไขได้ด้วยฟังก์ชันใดก็ได้ คำสั่งใดๆ ที่เขียนในโปรแกรมสามารถเปลี่ยนค่าของตัวแปรโกลบอลได้ สิ่งนี้อาจให้ผลลัพธ์ที่คาดเดาไม่ได้ในสภาพแวดล้อมแบบมัลติทาสก์
- หากตัวแปรโกลบอลถูกยกเลิกเนื่องจากการรีแฟคเตอร์โค้ด คุณจะต้องเปลี่ยนโมดูลทั้งหมดที่มีการเรียกตัวแปรเหล่านั้น
ข้อเสียของการใช้ตัวแปรท้องถิ่น
- กระบวนการแก้ไขข้อบกพร่องของตัวแปรภายในเครื่องนั้นค่อนข้างยุ่งยาก
- ข้อมูลทั่วไปที่ต้องส่งผ่านซ้ำๆ เนื่องจากไม่สามารถแบ่งปันข้อมูลระหว่างโมดูลได้
- พวกเขามีขอบเขตที่จำกัดมาก
มีประโยชน์อะไรมากกว่ากัน?
ตัวแปรท้องถิ่นและระดับโลกมีความสำคัญเท่าเทียมกันในขณะที่เขียนโปรแกรมในภาษาใดๆ อย่างไรก็ตาม ตัวแปรโกลบอลจำนวนมากอาจใช้หน่วยความจำขนาดใหญ่ การเปลี่ยนแปลงที่ไม่พึงประสงค์ในตัวแปรส่วนกลางกลายเป็นเรื่องยากที่จะระบุได้ ดังนั้นจึงแนะนำให้หลีกเลี่ยงการประกาศตัวแปรโกลบอลที่ไม่ต้องการ