@@ -11,7 +11,7 @@ next-page: traits
1111previous-page : unified-types
1212---
1313
14- คลาสใน Scala เป็นพิมพ์เขียวสำหรับสร้าง object ในคลาสสามารถมี method, value, ตัวแปร, type, object,
14+ คลาสใน Scala เป็นพิมพ์เขียวสำหรับสร้าง object ในคลาสสามารถมี method, value, ตัวแปร, type, object,
1515trait และคลาส ซึ่งเรียกรวมๆ กันว่า _ members_ หรือ _ สมาชิก_ ของคลาส type, object และ trait จะกล่าวถึงภายหลัง
1616
1717## การกำหนดคลาส
@@ -22,7 +22,7 @@ class User
2222
2323val user1 = new User
2424```
25- keyword ` new ` ใช้เพื่อสร้าง instance ของคลาส ` User ` มี constructor เริ่มต้นซึ่งไม่รับค่า argument เพราะว่าไม่ได้กำหนด constructor ไว้ตอนประกาสคลาส
25+ keyword ` new ` ใช้เพื่อสร้าง instance ของคลาส ` User ` มี constructor เริ่มต้นซึ่งไม่รับค่า argument เพราะว่าไม่ได้กำหนด constructor ไว้ตอนประกาสคลาส
2626
2727อย่างไรก็ตาม, เราอาจจะมี constructor และ body ของคลาส
2828ตัวอย่างดังนี้ เป็นการประกาศคลาสสำหรับจุด (point):
@@ -41,11 +41,11 @@ class Point(var x: Int, var y: Int) {
4141
4242val point1 = new Point (2 , 3 )
4343point1.x // 2
44- println(point1) // พิมพ์ (2, 3)
44+ println(point1) // แสดงค่า (2, 3)
4545```
4646
4747คลาส ` Point ` นี้มีสมาชิก 4 ตัว คือ ตัวแปร ` x ` และ ` y ` และ method ` move ` และ ` toString `
48- ไม่เหมือนภาษาอื่นๆ, ซึ่ง constructor หลักจะอยู่ใน class signature ` (var x: Int, var y: Int) `
48+ ไม่เหมือนภาษาอื่นๆ, ซึ่ง constructor หลักจะอยู่ใน class signature ` (var x: Int, var y: Int) `
4949method ` move ` รับ argument ชนิดตัวเลข 2 ตัว และ return เป็นค่า Unit ` () ` ซึ่งไม่มีค่า
5050จะมีผลลัพธ์คลายกับ ` void ` ในภาษาที่เหมือน Java, ` toString ` ในทางกลับกัน ไม่รับ argument ใดๆ แต่ return เป็นค่า ` String ` ซึ่งแทนที่ method ` toString ` จาก [ ` AnyRef ` ] ( unified-types.html ) โดยจะมี keyword ` override `
5151
@@ -58,7 +58,7 @@ class Point(var x: Int = 0, var y: Int = 0)
5858
5959val origin = new Point // x and y are both set to 0
6060val point1 = new Point (1 )
61- println(point1.x) // พิมพ์ 1
61+ println(point1.x) // แสดงค่า 1
6262
6363```
6464
@@ -68,13 +68,13 @@ println(point1.x) // พิมพ์ 1
6868``` scala mdoc:nest
6969class Point (var x : Int = 0 , var y : Int = 0 )
7070val point2 = new Point (y= 2 )
71- println(point2.y) // พิมพ์ 2
71+ println(point2.y) // แสดงค่า 2
7272```
7373
7474นี้เป็นวิธีปฏิบัติที่ดีเพื่อจะทำให้โค้ดชัดเจนมากขึ้น
7575
7676## Private Members และ Getter/Setter
77- สมาชิกของคลาสจะเป็น public โดยค่าเริ่มต้น ใช้ access modifier ` private `
77+ สมาชิกของคลาสจะเป็น public โดยค่าเริ่มต้น ใช้ access modifier ` private `
7878เพื่อซ่อนสมาชิกนั้นจากภายนอกของคลาส
7979``` scala mdoc:reset
8080class Point {
@@ -97,10 +97,10 @@ class Point {
9797
9898val point1 = new Point
9999point1.x = 99
100- point1.y = 101 // พิมพ์คำเตือน warning
100+ point1.y = 101 // แสดงค่า "WARNING: Out of bounds"
101101```
102- คลาส ` Point ` เวอร์ชันนี้ ข้อมูลจะถูกเก็บไว้ในตัวแปรชนิด private ที่ชื่อว่า ` _x ` และ ` _y ` และมี method ที่ชื่อว่า ` def x ` และ ` def y ` ทีจะใช้ในการเข้าถึงข้อมูล private เป็น getter, ` def x_= ` และ ` def y= `
103- เป็น method สำหรับตรวจสอบข้อมูลและ setting ค่าของตัวแปร ` _x ` และ ` _y `
102+ คลาส ` Point ` เวอร์ชันนี้ ข้อมูลจะถูกเก็บไว้ในตัวแปรชนิด private ที่ชื่อว่า ` _x ` และ ` _y ` และมี method ที่ชื่อว่า ` def x ` และ ` def y ` ทีจะใช้ในการเข้าถึงข้อมูล private เป็น getter, ` def x_= ` และ ` def y= `
103+ เป็น method สำหรับตรวจสอบข้อมูลและ setting ค่าของตัวแปร ` _x ` และ ` _y `
104104สังเกตว่า syntax พิเศษนี้สำหรับ setter: คือ method ที่ตามด้วย ` _= ` ไปยังตัวระบุของ setter และ parameter ตามหลังมา
105105
106106constructor หลักกำหนด parameter ด้วย ` val ` และ ` var ` เป็น public อย่างไรก็ตามเพราะว่า ` val ` เป็นตัวแปรที่เปลี่ยนแปลงไม่ได้ (immutable) เราไม่สามารถเขียบแบบนี้ได้
0 commit comments