สมัครเรียนโทร. 085-350-7540 , 084-88-00-255 , ntprintf@gmail.com

Tutorial JAVA

01 install Eclipse 02 intro to programming Eclipse 03 condition 04.loop 05.array 05 2 array cont 06 01 function 06 02 function cont 07 object 08 string 09 constructor 10 01 oop 10 02 oop2 11 exception 12 reading file 13 thread 14 generic 15 01 GUI 15 02 GUI2 15 03.GUI3 16 using WindowBuilder 17 event 18 database management system 19 ER diagram 20 Relational 21 Xampp 22 JDBC 23 MVC 24 SQL

ฟังก์ชัน(ต่อ)

ต่อไปนี้จะเป็นการพูดถึงในส่วนที่เหลือที่เกี่ยวข้องกับฟังก์ชัน ได้แก่ การเรียกใช้ฟังก์ชันทั้งจากภายในคลาสเดียวกันและจากต่างคลาสกัน อีกเรื่องได้ฟังก์ชันเรียกซ้ำ(recursive function)

Pass-by-value และ Pass-by-reference

            เนื่องจากการเรียกใช้ฟังก์ชันจะมีวิธีการที่ต้องเรียกเมท็อดแบบสร้าง reference ดังนั้นจะขออธิบายเรื่อง pass-by-value และ pass-by-reference ก่อน

Pass-by-value เป็นเรื่องของการส่งค่าระหว่างตัวแปรของประเภทข้อมูลชนิดต่างๆ ซึ่งจริงๆก็เป็นการส่งค่าตัวแปรแบบธรรมดาอย่างที่ได้ทำกันมาแล้ว เช่น a = 1; b = 6; a = b;    ผลลัพธ์ a =6; เป็นต้น เพราะฉะนั้นเครื่องหมาย = จึงมีความหมายว่าเอาค่าทางขวาไปใส่ทางซ้าย

ส่วน pass-by-reference มีความพิเศษกว่าแบบบนตรงที่เป็นเรื่องเกี่ยวกับอ็อปเจ็คด้วย เป็นเรื่องเกี่ยวกับการชี้[1](ด้วยเครื่องหมาย = ) กล่าวคือ เครื่องหมาย = จะมีความหมายว่าค่าทางซ้ายและค่าทางขวาชี้ไปที่อ็อปเจ็คเดียวกัน ค่าก็จะเหมือนกันด้วย

ตัวอย่างของ pass-by-reference

 


รูป 6-1

บรรทัดที่ 11 : สร้างตัวแปร x1 เป็นอ็อปเจ็คของคลาส StudyReference โดยกำหนดตัวแปรใน () เป็น 1

บรรทัดที่ 12 : สร้างตัวแปร x2 เป็นอ็อปเจ็คของคลาส StudyReference โดยกำหนดตัวแปร เป็น null หรือว่าง

เปล่า ถ้าสั่งแสดงผลของ x2 เลยันที จะเกิด java.lang.NullPointerException

บรรทัดที่ 14 : สั่งแสดงผลค่าของ x1

บรรทัดที่ 16 : ให้ x2 ชี้ไปยังอ็อปเจ็คที่ x1 ชี้อยู่

บรรทัดที่ 17 : ให้ x1 ชี้ไปยังอ็อปเจ็คใหม่คือเลข 25

บรรทัดที่ 19 : ให้แสดงค่าของ x1 ที่ชี้ไปที่อ็อปเจ็คใหม่ออกมา

บรรทัดที่ 20 : เนื่องจาก x2 ชี้ไปสิ่งเดียวกันกับที่ x1 ชี้อยู่ ดังนั้นเมื่อ x1 ชี้ไปสิ่งใหม่ x2 ก็จะต้องเปลี่ยนสิ่งที่ชี้ไป

ตาม x1 ด้วย ดังนั้น x2 จะต้องได้แสดงค่า 25

ผลลัพธ์ที่ได้

 


รูป 6-2

การเรียกใช้เมท็อด

            การเรียกใช้งานฟังก์ชัน จะต้องทำการพิมพ์ชื่อฟังก์ชันและใส่พารามิเตอร์ที่ถูกต้องกันกับฟังก์ชันนั้นไว้ใน ( ) ดังนี้

ชื่อเมท็อดที่ต้องการเรียกใช้(พารามิเตอร์);

สิ่งที่ต้องต้องรู้คือ

-          เวลาที่เราส่งค่าพารามิเตอร์ไปให้เมท็อด ค่านั้นจะเป็นค่าเริ่มต้นของเมท็อดทันทีโดยแม้เมท็อดจะกำหนดค่าใหม่ก็ไม่ได้มีผลอะไร

 


รูป 6-1-1

บรรทัดที่ 6-7 : ตั้งค่าเริ่มต้นให้กับตัวแปร a และ b

บรรทัดที่ 9-10 : เรียกใช้เมท็อด set ที่รับพารามิเตอร์เป็นตัวแปรจำนวนเต็ม ใส่พารามิเตอร์เป็นตัว

แปร a และ b ลงไป

บรรทัดที่ 18 : ภายในเมท็อด set รับพารามิเตอร์เป็นตัวแปร b และตั้งค่า b เป็น 0

ผลลัพธ์ที่ได้

 


รูป 6-1-2

            จะเห็นได้ว่าผลลัพธ์ที่ได้ยังเป็นเลขที่ส่งออกไปตั้งแต่แรกคือ a = 25 และ b = 60 การที่ทั้ง aและ b ไม่เกิดการเปลี่ยนแปลงก็เพราะว่าเมท็อดจะรับค่าตั้งต้นเป็นพารามิเตอร์จากจุดที่มีการเรียกใช้เมท็อด การเปลี่ยนแปลงที่เกิดขึ้นจากการตั้งค่าใหม่ในเมท็อดก็จะไม่เปลี่ยนค่าของตัวแปรไป และอีกประการคือตัวแปร b ที่กำหนดที่เมท็อด set ก็ถือว่าเป็นคนละตัวกับตัวแปร b  ที่อยู่ในmain ด้วย

การเรียกใช้เมท็อดในคลาสอีกแบบคือการเรียกเมท็อดแบบสร้าง reference แบบที่ได้พูดถึงข้างบน

 


รูป6-1-3

บรรทัดที่ 8 : ประกาศตัวแปร x เป็นตัวแปรไม่ธรรมดา

บรรทัดที่ 9 : ให้ x เรียกเมท็อด print มาใส่ตัวเอง จากนั้นนำค่าไปเก็บใส่ a

การเรียกใช้เมท็อดต่างคลาสกัน

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

แบบที่ 1 สร้างตัวแปรไม่ธรรมดา

class xx

{

               public static void main(String args[]) {

               ชื่อคลาสที่เมท็อดนั้นอยู่  a = new ชื่อคลาสที่เมท็อดนั้นอยู่();

  }

}

 

หรืออาจเรียกใช้งานได้โดย การ new ขึ้นมาเลย

class xx 
{
                public static void main(String args[]) {
                new ชื่อคลาสที่เมท็อดนั้นอยู่  ();
  }
}

 

 เมื่อสร้างตัวแปรของคลาสนั้นมาแล้วทำให้เครื่องหมาย “.”  เพื่อ

class xx 
{
               public static void main(String args[]) {
                ชื่อคลาสที่เมท็อดนั้นอยู่    a = new ชื่อคลาสที่เมท็อดนั้นอยู่  ();
               a.เมท็อดที่ต้องการเรียกใช้();
  }
 
ฟังก์ชันเรียกซ้ำ(Recursive function)

            การเขียนฟังก์ชันมากๆ บางครั้งก็มีการเรียกใช้งานกันไปมาเช่น ฟังก์ชัน a เรียก ฟังก์ชัน b แต่ในฟังชัน b ก็มีการเรียกใช้งาน a และก็เป็นไปได้ที่ฟังก์ชันจะมีการเรียกตัวเองให้ทำงาน

 

ตัวอย่างการหาจำนวนฟิโบนัคชี(Fibonacci number) ด้วยการเขียนฟังก์ชันแบบเรียกซ้ำ

 


รูป 6-1-4

ในเมท็อด main ทำการวนลูปจาก 0-10 และเรียกใช้ฟังก์ชัน fibo เพื่อคำนวณหาเลขฟิโบนัคชี การเรียกซ้ำอยู่ตรงที่ บรรทัดที่ 19 จะให้หาค่าจนกว่าจะได้ตามที่เขียน ถ้าเขียนเมท็อดนี้ด้วย ลูปก็ได้แต่จะยาวและดูยากมาก

ผลลัพธ์จำนวนฟิโบนัคชี 10 ตัวแรก

 


รูป 6-1-5



[1] การชี้หมายถึงชี้ยัง memory ที่ตัวแปรจองตำแหน่งไว้ใน heap memory 



บทความนี้อาจจะมีที่ผิด กรุณาตรวจสอบก่อนใช้

หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor

ไม่อยากอ่าน Tutorial อยากมาเรียนเลยทำอย่างไร?

สมัครเรียน ONLINE ได้ทันทีที่ https://elearn.expert-programming-tutor.com

หรือติดต่อ

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM

แผนที่ ที่ตั้งของอาคารของเรา

C Article


C++ Article


Java Article


C#.NET Article


VB.NET Article


Python Article


Golang Article


JavaScript Article


Perl Article


Lua Article


Rust Article


Article


Python


Python Numpy


Python Machine Learning



แผนผังการเรียนเขียนโปรแกรม

Link อื่นๆ

Allow sites to save and read cookie data.
Cookies are small pieces of data created by sites you visit. They make your online experience easier by saving browsing information. We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.

Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com

ติดต่อเราได้ที่

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
แผนที่ ที่ตั้งของอาคารของเรา