Skip to content
Siamcoder

คำสั่ง super() ในการเข้าถึงตัวแปรในภาษา R

R2 min read

คำสั่ง super() เพื่อเข้าถึงตัวแปรใน R

ในภาษา R, เราสามารถเข้าถึงตัวแปรที่ถูกสืบทอดมาจากคลาสหรือฟังก์ชันที่สร้างขึ้นก่อนหน้านี้ได้โดยใช้คำสั่ง super() ซึ่งช่วยให้เราสามารถเรียกใช้ตัวแปรหรือเมธอดของคลาสหรือฟังก์ชันแม่ได้อย่างง่ายดาย นี่คือตัวอย่างโค้ดที่แสดงการใช้งานคำสั่ง super() ใน R:

# สร้างคลาส Parent
Parent <- setRefClass("Parent",
fields = list(x = "numeric"),
methods = list(
initialize = function(x) {
self$x <- x
},
getX = function() {
return(self$x)
}
)
)
# สร้างคลาส Child ที่สืบทอดจากคลาส Parent
Child <- setRefClass("Child",
contains = "Parent",
methods = list(
initialize = function(x, y) {
super$initialize(x)
self$y <- y
},
getY = function() {
return(self$y)
},
getXY = function() {
x <- super$getX()
y <- self$getY()
return(list(x = x, y = y))
}
)
)
# สร้างอ็อบเจ็กต์ของคลาส Child
obj <- Child$new(10, 20)
# เรียกใช้เมธอด getX และ getY ด้วย super()
x <- obj$getX()
y <- obj$getY()
# แสดงค่า x และ y
print(x)
print(y)
# เรียกใช้เมธอด getXY ด้วย super()
xy <- obj$getXY()
# แสดงค่า x และ y ที่ได้จากเมธอด getXY
print(xy$x)
print(xy$y)`

ในตัวอย่างข้างต้น เราสร้างคลาส Parent และคลาส Child ซึ่ง Child เป็นคลาสลูกที่สืบทอดมาจาก Parent ในเมธอด initialize ของคลาส Child เราใช้ super$initialize() เพื่อเรียกใช้เมธอด initialize ของ Parent เพื่อกำหนดค่าตัวแปร x และ y ใน Child นอกจากนี้ เรายังสามารถใช้ super() เพื่อเข้าถึงเมธอด getX และ getY ของ Parent ได้อีกด้วย และเมื่อเราเรียกใช้เมธอด getXY ใน Child เราสามารถใช้ super$getX() และ self$getY() เพื่อเข้าถึงค่า x และ y ใน Parent และ Child ตามลำดับ

การใช้ super() ใน R ช่วยให้เราสามารถเข้าถึงตัวแปรและเมธอดที่ถูกสืบทอดมาได้อย่างสะดวกและยืดหยุ่น ซึ่งเป็นประโยชน์สำคัญในการออกแบบและพัฒนาโครงสร้างของโปรแกรม

สำหรับคำสั่ง super() ในภาษา R มีคุณสมบัติที่น่าสนใจอีกอย่างคือการส่งอาร์กิวเมนต์เข้าสู่เมธอดในคลาสแม่ นี่คือตัวอย่างโค้ดที่แสดงการใช้งานคำสั่ง super() เพื่อส่งอาร์กิวเมนต์ใน R:

# สร้างคลาส Parent
Parent <- setRefClass("Parent",
methods = list(
initialize = function(x) {
self$x <- x
},
printX = function() {
print(paste("Value of x:", self$x))
}
)
)
# สร้างคลาส Child ที่สืบทอดจากคลาส Parent
Child <- setRefClass("Child",
contains = "Parent",
methods = list(
initialize = function(x, y) {
super$initialize(x)
self$y <- y
},
printXandY = function() {
super$printX()
print(paste("Value of y:", self$y))
}
)
)
# สร้างอ็อบเจ็กต์ของคลาส Child
obj <- Child$new(10, 20)
# เรียกใช้เมธอด printXandY ใน Child
obj$printXandY()`

ในตัวอย่างข้างต้น เราสร้างคลาส Parent และคลาส Child โดย Child เป็นคลาสลูกที่สืบทอดมาจาก Parent ในเมธอด initialize ของ Child เราใช้ super$initialize() เพื่อเรียกใช้เมธอด initialize ของ Parent เพื่อกำหนดค่าตัวแปร x ใน Child นอกจากนี้ เรายังสร้างเมธอด printXandY ใน Child ที่ใช้ super$printX() เพื่อเรียกใช้เมธอด printX ใน Parent เพื่อแสดงค่าของตัวแปร x และใช้ self$y เพื่อแสดงค่าของตัวแปร y ใน Child

การใช้งาน super() ใน R ช่วยให้เราสามารถส่งอาร์กิวเมนต์ไปยังเมธอดในคลาสแม่ได้อย่างสะดวก นอกจากนี้ยังช่วยในกรณีที่ต้องการเข้าถึงคำสั่งหรือฟังก์ชันในคลาสแม่ที่มีการเขียนทับ (overridden) ในคลาสลูก