ตอนที่ 2: ตัวแปร local, global และ function

. . . . . . . .การเขียนโปรแกรม ถ้าเป็นโปรแกรมใหญ่ๆ เราก็ต้องมีการแบ่งการทำงานออกเป็นส่วนๆ เพื่อลดความซับซ้อน และเพื่อความสะดวก ในการแก้ไขโปรแกรม ยกตัวอย่าง
// 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

Sawasdee

Print 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

Sawasdee

Value 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;

}

Sawasdee

Value 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;

}

Sawasdee

Value 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

. . . . . . . .วันนี้ก็ได้เรื่องการสร้าง function ตัวแปร local และ global การผ่านค่าตัวแปรไปยัง function และการรับค่าจาก function กัน ติดตามๆ ง่ายๆ ฮ่า ฮ่า ฮ่า เรียนเร็ว จบเร็ว ทำเกมเร็วขึ้น ว้าว !!