Properti versus metode







Sekilas, pertanyaan seperti memilih properti atau metode tampak sederhana. Tapi itu sampai Anda mengalami kesalahpahaman di tim Anda. Meskipun ada praktik yang mapan, kata-katanya agak kabur. Ada tingkat kebebasan tertentu dalam pertanyaan semacam itu, yang membuat pilihan kita sulit, dan kesederhanaan yang tampak memberi lahan subur untuk perselisihan.







Latar belakang programmer Java



— . - . , , Java , .







:







public class Point {
    public double x;
    public double y;
}
      
      





, . ? -, , . -, , .







, , , :







public class Point {

    private double x;
    private double y;

    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public double getX() {
        return x;
    }

    public void setX(double x) {
        this.x = x;
    }

    public double getY() {
        return y;
    }

    public void setY(double y) {
        this.y = y;
    }
}
      
      





Java, IDE .

get set.







, , .









get set:







class Point(var x: Double, var y: Double)
      
      





, ? : x



getX()



.







:







var x: Double = 0 
    set(value) {
        if (value >= 0) field = value
    }
      
      





, . , .







, . , Java get set , . , . ? , .









, read-only .







, , :







  • (exception)
  • ( )
  • ,


. -, . .







, User:







class User(
    val firstName: String,
    val lastName: String
)
      
      





?







val fullName get() = "$firstName $lastName"
      
      





String, . equals. fullName, .







.









, . ? , , . -: , . , , .







:







class DocumentModel {
     val activePageIndex: Int
}
      
      





, activePageIndex, . , , , :







images.forEach { image ->
   document addImage(image, document.activePageIndex)
}
      
      





, , , . , :







val pageIndex = document.activePageIndex
images.forEach { image ->
   document addImage(image, pageIndex)
}
      
      





, . , , , . , . , - -, , findActivePageIndex.









, , , . , . , . , , ? — . Java . , , get set .







, -, . , API . . , API , .







, IDE, . , . , .







— , . . , . . , .









, , , . . , ?







. , :







  • . , . .
  • . , . .

    .


, .







, get/set, .




, :







interface Point {
    var x: Double
    var y: Double
}
      
      





?







-, x y. , , . , .







x y :







interface Point {
    val x: Double
    val y: Double
    fun setCoordinates(x: Double, y: Double)
}
      
      





Kedua, antarmukanya kurang fleksibel. Kadang-kadang nyaman untuk bekerja dengan koordinat kutub, tetapi di antarmuka hanya persegi panjang. Jadi, kami secara implisit mengungkapkan implementasinya.







Mari kembangkan antarmuka:







interface Point {
    val x: Double
    val y: Double
    val radius: Double
    val angle: Double
    fun setCartesian(x: Double, y: Double)
    fun setPolar(radius: Double, angle: Double)
}
      
      





Seperti yang bisa kita lihat, mendesain antarmuka yang baik tidaklah mudah. Meskipun bisa dibatasi pada kelas data:







data class Point(
    var x: Double,
    var y: Double
)
      
      






All Articles