
Auf den ersten Blick erscheint eine Frage wie die Auswahl einer Eigenschaft oder Methode einfach. Aber das ist so lange, bis Sie in Ihrem Team auf Missverständnisse stoßen. Obwohl es gut etablierte Praktiken gibt, ist ihr Wortlaut eher vage. In solchen Fragen gibt es einen gewissen Freiheitsgrad, der unsere Wahl erschwert, und die scheinbare Einfachheit bietet einen fruchtbaren Grund für Streitigkeiten.
Hintergrund der Java-Programmierer
— . - . , , 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)
}
Zweitens ist die Schnittstelle nicht flexibel genug. Manchmal ist es bequem, mit Polarkoordinaten zu arbeiten, in der Schnittstelle jedoch nur mit rechteckigen. Daher legen wir die Implementierung implizit offen.
Lassen Sie uns die Schnittstelle erweitern:
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)
}
Wie wir sehen können, ist das Entwerfen einer guten Benutzeroberfläche nicht einfach. Obwohl es auf die Datenklasse beschränkt sein könnte:
data class Point(
var x: Double,
var y: Double
)