Do tej pory miałem prosty pogląd na ten temat i używałem do pisania properties wyłącznie, żeby zastąpić gettery i settery (czyli wynik zmowy twórców Java i producentów klawiatur). Dla przykładu:
public class Rectangle{
public Rectangle(int length, int height){
...
}
private final int length;
private final int height;
public int getLength()...
public int getHeight()...
public area(){
return length * height;
}
}
W takim Kotlinie zapisałbym tak:
class Rectangle(val length:Int, val height:height){
fun area() length*height
}
Coś mnie podkusiło, żeby w końcu dać szansę ortodoksyjnemu TDD i zacząłem pisać tak teścik:
assertEquals(6, Rectangle(2, 3).area)
Bo skoro zaczynam od testu, to nie mam zielonego pojęcia, czy area jest propertisem, czy metodą, a nawet nie chcę tego wiedzieć, Chcę coś z obiektu odczytać, nie mam zamiaru go w żaden sposób zmienić tym odczytem, nie mam najmniejszej nawet potrzeby przekazania podczas tego odczytu jakiegokolwiek parametru, to po co metoda?
Wyszło coś takiego:
class Rectangle(val length:Int, val height:height){
val area
get() = length*height
}
I teraz troche nie wiem, czy to podejście jest OK. Wiadomo, jest jakaś fiksacja na Java i coś albo powinno być get'em i nie mieć logiki, albo mieć logikę i nie być get'em.