local ,global และ function (C++)


      การเขียนโปรแกรม ถ้าเป็นโปรแกรมใหญ่ๆ เราก็ต้องมีการแบ่งการทำงานออกเป็นส่วนๆ เพื่อลดความซับซ้อน และเพื่อความสะดวก ในการแก้ไขโปรแกรม ยกตัวอย่าง

// MAIN.CPP#include <stdio.h>
#include <conio.h>
void function1( ) //<---- function1 ชนิด void ไม่ต้อง return ค่ากลับ
//<----- เริ่มต้นขอบเขตการทำงานของ function1
printf( "Print from function1\n" ); //<--- ให้พิมพ์ข้อความบอกว่า พิมพ์มาจาก function1
//<--- สิ้นสุดขอบเขตการทำงานของ function1
int function2( ) //<---- function1 ชนิด int ต้อง return ค่ากลับ
//<----- เริ่มต้นขอบเขตการทำงานของ function2
printf( "Print from function2\n" ); //<--- ให้พิมพ์ข้อความบอกว่า พิมพ์มาจาก function2
return 0; //<--- ต้องส่งค่ากลับเพราะไม่ใช่ function แบบ void
//<--- สิ้นสุดขอบเขตการทำงานของ function2
int main( )
//<----- เริ่มต้นขอบเขตการทำงานของ main
printf( "Sawasdee\n" ); //<--- ให้พิมพ์ข้อความ Sawasdee
function1( ); //<------ เรียกการทำงานของ function1
funcion2( ); //<------ เรียกการทำงานของ function2
return 0; //<---- ให้ค่าส่งกลับ 0
//<--- สิ้นสุดขอบเขตการทำงานของ main

SawasdeePrint form function1
Print form function2

. . . . . . . จากตัวอย่าง การเขียนก็จะเห็นว่ามี 3 function ด้วยกันคือ function1, function2 และ mainมาดูการทำงานกัน function main จะพิมพ์ข้อความ Sawasdee ออกมาก่อน จากนั้นจะไปเรียกการทำงานของ function1 ให้พิมพ์ข้อความ print from function1 และก็ไปเรียก function2 ให้พิมพ์ข้อความ printf from function2 จบการทำงาน ไม่เข้าใจกลับไปดูได้ ง่ายๆ function เขียนยังงัย ตัวอย่างต่อไปเป็นการเพิ่มตัวแปรเข้าไป ให้สังเกตให้ดีดี นะครับ

// MAIN.CPP#include <stdio.h>
#include <conio.h>
void function1( ) //<---- function1 ชนิด void ไม่ต้อง return ค่ากลับ
//<----- เริ่มต้นขอบเขตการทำงานของ function1
int i = 10;
printf( "Value in i = %i\n" , i ); //<--- ให้พิมพ์ค่า i ออกมา
//<--- สิ้นสุดขอบเขตการทำงานของ function1
int function2( ) //<---- function1 ชนิด int ต้อง return ค่ากลับ
//<----- เริ่มต้นขอบเขตการทำงานของ function2
int i = 20;
printf( "Value in i = %i\n" , i ); //<--- ให้พิมพ์ค่า i ออกมา
return 0; //<--- ต้องส่งค่ากลับเพราะไม่ใช่ function แบบ void
//<--- สิ้นสุดขอบเขตการทำงานของ function2
int main( )
//<----- เริ่มต้นขอบเขตการทำงานของ main
printf( "Sawasdee\n" ); //<--- ให้พิมพ์ข้อความ Sawasdee
function1( ); //<------ เรียกการทำงานของ function1
funcion2( ); //<------ เรียกการทำงานของ function2
return 0; //<---- ให้ค่าส่งกลับ 0
//<--- สิ้นสุดขอบเขตการทำงานของ main

SawasdeeValue in i = 10
Value in i = 20

. . . . . . . .สังเกตุให้ดีี ตัวแปร i ที่อยู่ใน function1 และ function2 ชื่อตัวแปรเหมือนกันแต่ขอบเขตการใช้งาน อยู่คนที่ขอบเขต เพราะฉนั้น สิ่งที่อยู่ในขอบเขตของ function1 ก็ไม่เกี่ยวกับ function2 และสิ่งที่อยู่ใน function2 ก็ไม่เกี่ยวกับ function1 ไม่เข้าใจ กลับไปดูใหม่ได้นะครับ พูดถึงขอบเขตแล้ว ตัวแปรที่อยู่ในเครื่องหมายปีกกา เราเรียกว่า ตัวแปร Local คือตัวแปรที่มีขอบเขตการทำงานเฉพาะในปีกกาเปิด และสิ้นสุดที่ปีกกาปิดเท่านั้น มาดูตัวอย่างต่อนี้

// MAIN.CPP#include <stdio.h>
#include <conio.h>
void function1( ) //<---- function1 ชนิด void ไม่ต้อง return ค่ากลับ
//<----- เริ่มต้นขอบเขตการทำงานของ function1
int i = 10; //<------ ตัวแปร local
printf( "Value in i = %i\n" , i ); //<--- ให้พิมพ์ค่า i ออกมา
//<----- เริ่มต้นขอบเขตการทำงานซ้อน
int k = 20; //<----- ตัวแปร local ภายในขอบเขตการทำงานซ้อนนี้เท่านั้น
printf( "Value in k = %i\n", i ); //<--- ให้พิมพ์ค่า k ออกมา
printf( "Value in i = %i\n", k); //<--- ให้พิมพ์ค่า i ออกมา
}//<----- สิ้นสุดขอบเขตการทำงานซ้อน
printf( "Value in k = %i\n", k ); //<--- ไม่สามารถพิมพ์ค่า k ออกมาได้ เพราะสิ้นสุดขอบเขตตัวแปร k แล้ว ไม่ต้องคีย์บรรทัดนี้นะครับ
//<--- สิ้นสุดขอบเขตการทำงานของ function1
int main( )
{
printf( "Sawasdee\n" );
function1( ); //<------ เรียกการทำงานของ function1
return 0;
}

SawasdeeValue in i = 10
Value in k = 20
Value in i = 10

. . . . . . . .จากตัวอย่าง ตัวแปร i และ ตัวแปร k จะมีขอบเขตการทำงานเฉพาะภายในปีกกาเท่านั้น และการใช้ตัวแปรก็จำกัดเฉพาะเขตของมัน ในขอบเขตของตัวแปร k เราสามารถใช้ตัวแปร i ได้ เพราะยังไม่สิ้นสุดขอบเขตการทำงาน แต่เราไม่สามารถใช้ตัวแปร k ถ้าสิ้นสุดขอบเขตการทำงานของตัวแปร k และ ตัวแปรทั้งหมดนี้ก็ยังคงเป็นตัวแปร local อยู่ไม่ต้องสงสัย แต่เป็นตัวแปร local ในขอบเขตปีกกาเท่านั้น มาดูตัวอย่างต่อไป

// MAIN.CPP#include <stdio.h>
#include <conio.h>
int gvalue = 100; //<------- ตัวแปร Global
void function1( )
{
int i = 10; //<------ ตัวแปร local
printf( "Value in i = %i\n" , i );
//<----- เริ่มต้นขอบเขตการทำงานซ้อน
int k = 20; //<----- ตัวแปร local ภายในขอบเขตการทำงานซ้อนนี้เท่านั้น
printf( "Value in k = %i\n", i );
printf( "Value in i = %i\n", k );
printf( "Value in gvalue = %i\n", gvalue ); //<--- พิมพ์ค่าที่อยู่ใน gvalue
}//<----- สิ้นสุดขอบเขตการทำงานซ้อน
printf( "Value in gvalue = %i\n", gvalue ); //<--- พิมพ์ค่าที่อยู่ใน gvalue
}
int main( )
{
printf( "Sawasdee\n" );
function1( );
printf( "Value in gvalue = %i\n", gvalue ); //<--- พิมพ์ค่าที่อยู่ใน gvalue
return 0;
}

SawasdeeValue in i = 10
Value in k = 20
Value in i = 10
Value in gvalue = 100
Value in gvalue = 100
Value in gvalue = 100

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

สรุป ได้อะไรบ้าง


void function1( ) //<---- function1 ชนิด void ไม่ต้อง return ค่ากลับint function2( ) //<---- function1 ชนิด int ต้อง return ค่ากลับ
int i = 10; //<------ ตัวแปร local
int k = 20; //<----- ตัวแปร local ภายในขอบเขตการทำงานซ้อนนี้เท่านั้น
int gvalue = 100; //<------- ตัวแปร Global