
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 , . , . ? , .
, , :
- (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
)