การใช้ Array ร่วมกับ Function

เพื่อทดสอบการใช้ VFP ร่วมกับตัวแปรประเภท Array ผมจึงเขียนคำสั่งดังข้างล่างนี้เพื่อทดสอบการใช้งาน Array ทั้งส่งข้อมูลเข้าไปใน Function และการรับค่า Array ที่คืนจาก Function ออกมาใช้งานต่อ แยกเป็นส่วนๆได้ดังนี้

  1. * สร้างตัวแปร myarray ให้เป็น array แล้วกำหนดค่าเป็น A,B ตามลำดับ
  2. DIMENSION myarray[2]
  3. myarray[1]="A"
  4. myarray[2]="B"

  1. * ทดลองพิมพ์ออกมาดูว่าเก็บค่าอยู่จริงมั๊ย
  2. ?"test print array value"
  3. for i=1 to alen(myarray)
  4. ?i,myarray[i]
  5. next i

  1. * ส่งค่าไปใช้ในฟังก์ชั้น
  2. do print_r with myarray

  1. * การรับค่า array คืนจากฟังก์ชั่น
  2. dime pointer[5] && ต้องประกาศตัวแปร array ที่จะเป็นตัว contrainer (ส่งค่าไปและรับค่ากลับ) ขึ้นมาก่อน
  3. pointer = returnarray(@pointer) && จากนั้นส่ง pinter ของตัวแปร array ที่จะเป็นตัว contrainer ไปยังฟังก์ชั่น
  4. * ค่าที่รับมาแบบ pointer จะเป็น array หรือไม่ก็ได้ แต่กรณีนี้เป็น array เพราะฟังก์ชั่นคืนค่า pointer ของตัวแปร array กลับมา
  5. * ทดลองพิมพ์ค่าออกมาดูว่าเก็บค่าอะไรไว้
  6. do print_r with pointer
  7. return

  1. * ฟังก์ชั่นทดสอบการรับตัวแปร array มาใช้
  2. function print_r
  3. parameter internal_array
  4. ?"Function 'print_r' - พิมพ์ค่าใน array ออกมา"
  5. for i=1 to alen(internal_array)
  6. ?i,internal_array[i]
  7. next i
  8. endfunc

  1. * ฟังก์ชั่นทดสอบการคืนค่า pinter ที่ชี้ตัวแปร array กลับไป
  2. * หมายเหตุ จุดสำคัญของเรื่องคือ
  3. * 1. ต้องประกาศตัวแปร array ขึ้นมาก่อนจะเรียก function เพื่อเป็น contrainer
  4. * 2. ต้องส่ง pointer ของตัวแปร array ที่ประกาศนั้นมาด้วยขณะเรียก function แม้ว่าไม่ได้มีค่าอะไรเป็น input
  5. * 3. ปกติฟังก์ชั่นจะคืนค่ากลับได้ค่าเดียว ดังนั้นเมื่อจะคืนหลายๆค่าเราจึงคืนค่าเป็น pointer ของ array
  6. * 4. ใช้ @นำหน้าชื่อตัวแปรสำหรับการส่งค่า pointer
  7. function returnarray
  8. parameter pointer
  9. * เราใช้ตัวแปรชื้อ pointer ได้เลยเพราะสร้างมาตั้งแต่ก่อนเรียกใช้ฟังก์ชั่น
  10. * เมื่อตัวชี้มันชี้ไปที่ตัวแปรที่ประกาศไว้แล้ว และตัวแปรนั้นเป็น array จึงใช้เสมือน array ปกติ
  11. pointer[1]="A"
  12. pointer[2]="B"
  13. pointer[3]="C"
  14. pointer[4]="D"
  15. pointer[5]="E"
  16. return @pointer
  17. endfunc

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

เมื่อ VFP Table พัง

VFP SQL UPDATE ปรับปรุงค่าในฟิลด์ด้วยค่าจากตารางอื่น