一見、プロパティやメソッドの選択などの質問は簡単に思えます。しかし、それはあなたがあなたのチームで誤解にぶつかるまでです。確立された慣行がありますが、それらの表現はかなり曖昧です。そのような質問にはある程度の自由度があり、それが私たちの選択を困難にし、明白な単純さが論争の肥沃な根拠を与えます。
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)
}
第二に、インターフェースは十分な柔軟性がありません。極座標で作業すると便利な場合もありますが、インターフェイスでは長方形のみです。したがって、実装を暗黙的に開示します。
インターフェイスを拡張してみましょう:
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)
}
ご覧のとおり、優れたインターフェースの設計は簡単ではありません。データクラスに限定することもできますが、
data class Point(
var x: Double,
var y: Double
)