@@ -11,7 +11,7 @@ next-page: traits
11
11
previous-page : unified-types
12
12
---
13
13
14
- คลาสใน Scala เป็นพิมพ์เขียวสำหรับสร้าง object ในคลาสสามารถมี method, value, ตัวแปร, type, object,
14
+ คลาสใน Scala เป็นพิมพ์เขียวสำหรับสร้าง object ในคลาสสามารถมี method, value, ตัวแปร, type, object,
15
15
trait และคลาส ซึ่งเรียกรวมๆ กันว่า _ members_ หรือ _ สมาชิก_ ของคลาส type, object และ trait จะกล่าวถึงภายหลัง
16
16
17
17
## การกำหนดคลาส
@@ -22,7 +22,7 @@ class User
22
22
23
23
val user1 = new User
24
24
```
25
- keyword ` new ` ใช้เพื่อสร้าง instance ของคลาส ` User ` มี constructor เริ่มต้นซึ่งไม่รับค่า argument เพราะว่าไม่ได้กำหนด constructor ไว้ตอนประกาสคลาส
25
+ keyword ` new ` ใช้เพื่อสร้าง instance ของคลาส ` User ` มี constructor เริ่มต้นซึ่งไม่รับค่า argument เพราะว่าไม่ได้กำหนด constructor ไว้ตอนประกาสคลาส
26
26
27
27
อย่างไรก็ตาม, เราอาจจะมี constructor และ body ของคลาส
28
28
ตัวอย่างดังนี้ เป็นการประกาศคลาสสำหรับจุด (point):
@@ -41,11 +41,11 @@ class Point(var x: Int, var y: Int) {
41
41
42
42
val point1 = new Point (2 , 3 )
43
43
point1.x // 2
44
- println(point1) // พิมพ์ (2, 3)
44
+ println(point1) // แสดงค่า (2, 3)
45
45
```
46
46
47
47
คลาส ` 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) `
49
49
method ` move ` รับ argument ชนิดตัวเลข 2 ตัว และ return เป็นค่า Unit ` () ` ซึ่งไม่มีค่า
50
50
จะมีผลลัพธ์คลายกับ ` void ` ในภาษาที่เหมือน Java, ` toString ` ในทางกลับกัน ไม่รับ argument ใดๆ แต่ return เป็นค่า ` String ` ซึ่งแทนที่ method ` toString ` จาก [ ` AnyRef ` ] ( unified-types.html ) โดยจะมี keyword ` override `
51
51
@@ -58,7 +58,7 @@ class Point(var x: Int = 0, var y: Int = 0)
58
58
59
59
val origin = new Point // x and y are both set to 0
60
60
val point1 = new Point (1 )
61
- println(point1.x) // พิมพ์ 1
61
+ println(point1.x) // แสดงค่า 1
62
62
63
63
```
64
64
@@ -68,13 +68,13 @@ println(point1.x) // พิมพ์ 1
68
68
``` scala mdoc:nest
69
69
class Point (var x : Int = 0 , var y : Int = 0 )
70
70
val point2 = new Point (y= 2 )
71
- println(point2.y) // พิมพ์ 2
71
+ println(point2.y) // แสดงค่า 2
72
72
```
73
73
74
74
นี้เป็นวิธีปฏิบัติที่ดีเพื่อจะทำให้โค้ดชัดเจนมากขึ้น
75
75
76
76
## Private Members และ Getter/Setter
77
- สมาชิกของคลาสจะเป็น public โดยค่าเริ่มต้น ใช้ access modifier ` private `
77
+ สมาชิกของคลาสจะเป็น public โดยค่าเริ่มต้น ใช้ access modifier ` private `
78
78
เพื่อซ่อนสมาชิกนั้นจากภายนอกของคลาส
79
79
``` scala mdoc:reset
80
80
class Point {
@@ -97,10 +97,10 @@ class Point {
97
97
98
98
val point1 = new Point
99
99
point1.x = 99
100
- point1.y = 101 // พิมพ์คำเตือน warning
100
+ point1.y = 101 // แสดงค่า "WARNING: Out of bounds"
101
101
```
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 `
104
104
สังเกตว่า syntax พิเศษนี้สำหรับ setter: คือ method ที่ตามด้วย ` _= ` ไปยังตัวระบุของ setter และ parameter ตามหลังมา
105
105
106
106
constructor หลักกำหนด parameter ด้วย ` val ` และ ` var ` เป็น public อย่างไรก็ตามเพราะว่า ` val ` เป็นตัวแปรที่เปลี่ยนแปลงไม่ได้ (immutable) เราไม่สามารถเขียบแบบนี้ได้
0 commit comments