Menu
CoddyTech

Method show

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 25 dari 57.

Saat object S4 dicetak, R memanggil fungsi show(). Tanpa method untuk class tersebut, R mencantumkan setiap slot. Hasilnya benar, tetapi panjang:

setClass("Point", slots = c(x = "numeric", y = "numeric"))
p <- new("Point", x = 1, y = 2)
p

Output:

An object of class "Point"
Slot "x":
[1] 1

Slot "y":
[1] 2

setMethod("show", "Point", function(object) ...) memberi class cara pencetakannya sendiri. Method ini mencetak dengan cat(), dan digunakan baik saat object dicetak di tingkat teratas maupun oleh print():

setClass("Point", slots = c(x = "numeric", y = "numeric"))
setMethod("show", "Point", function(object) {
  cat("Point(", object@x, ", ", object@y, ")\n", sep = "")
})
p <- new("Point", x = 1, y = 2)
p
print(p)

Output:

Point(1, 2)
Point(1, 2)

Sebuah slot dapat menyimpan object S4 lain: nyatakan tipenya dengan nama class. Method show() dari object luar dapat mencetak object di dalamnya dengan memanggil show() pada object tersebut:

setClass("Point", slots = c(x = "numeric", y = "numeric"))
setMethod("show", "Point", function(object) cat("(", object@x, ", ", object@y, ")", sep = ""))
setClass("Line", slots = c(from = "Point", to = "Point"))
setMethod("show", "Line", function(object) {
  cat("line ")
  show(object@from)
  cat(" -> ")
  show(object@to)
  cat("\n")
})
new("Line", from = new("Point", x = 0, y = 0), to = new("Point", x = 3, y = 4))

Output:

line (0, 0) -> (3, 4)

class virtual, yang dideklarasikan dengan representation("VIRTUAL"), tidak dapat dibuat dengan new(). class ini berfungsi sebagai induk bersama bagi class lain, yang menjadi dasar bab Pewarisan S4. isVirtualClass() membedakan kedua jenis tersebut:

setClass("Shape", representation("VIRTUAL"))
setClass("Point", slots = c(x = "numeric"))
cat(isVirtualClass("Shape"), isVirtualClass("Point"), "\n")
msg <- tryCatch(new("Shape"), error = function(e) "cannot create a Shape")
cat(msg, "\n")

Output:

TRUE FALSE 
cannot create a Shape 
challenge icon

Tantangan

Mudah

Titik dan segmen adalah dua class S4 dalam dua file. Class tersebut sudah dideklarasikan. Tambahkan method show() untuk keduanya:

  • Di Point.R: titik dicetak sebagai Point(1, 2) diikuti baris baru.
  • Di Segment.R: segmen dicetak sebagai Segment Point(1, 2) to Point(4, 6), length 5 diikuti baris baru, dengan panjang dibulatkan hingga dua angka desimal. Buat sendiri teks titik atau gunakan helper; method titik mencetak baris barunya sendiri, jadi jangan panggil di tengah baris segmen.

Kode yang disediakan membaca baris 1,2 4,6, lalu mencetak titik pertama dan segmen, keduanya melalui method show().

Tulis kodemu di Point.R dan Segment.R. main.R berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

source("Point.R")
source("Segment.R")

# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
for (line in input) {
  n <- as.numeric(strsplit(line, "[ ,]")[[1]])
  a <- new("Point", x = n[1], y = n[2])
  b <- new("Point", x = n[3], y = n[4])
  print(a)
  print(new("Segment", from = a, to = b))
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler R online