Pull to refresh

Comments 14

спасибо, пропустил. видать не очень был искренним :)
Перегружать конструкторы незачем

Да? «Вы неправильно его держите»? А если надо? Если надо по-разному сконструировать в зависимости от типа первого аргумента.
Можно делать вот такой финт ушами:

class Greeter(val name : String) {
  fun greet() = println("Hello, ${name}")
}

fun Greeter(val value:Int) = Greeter(value.toString())

fun main(args : Array<String>) {
  Greeter(1).greet()
}
А вы уверены, что надо? По описанию похоже на два разных класса с общим родителем!
НЛО прилетело и напомнило что make-функции всё ещё доступны человечеству.
Перегружать конструкторы незачем

А как без перегрузки конструктора сделать что-то вроде:
class A {
	private readonly B _b;
	private readonly C _c;
	A(B b) {
		_b = b;
		_c = f1(b);
	}
	
	A(C c) {
		_c = c;
		_b = f2(c);
	}
}

?

Если мы сделаем конструктор:
A(B b = null, C c = null) {
	...
}

то из него не будет понятно, что надо обязательно указать по крайней мере один(или вообще только один) из параметров.
Думаю как то так:

class A(val b: B, val c: C);

fun A(b: B) = A(b, f1(b));

fun A(c: C) = A(f2(c), c);


А еще лучше написать так:
data class A(val b: B, val c: C);

и тогда компилятор сгенерирует toString(), equals(), hashCode() и функции для доступа к компонентам класса, чтобы можно было писать так:
val (b, c) = funWhichReturnsA()

Остроумно, не удобно импортировать.

Думал можно по аналогии со scala воспользоваться class object с методом invoke — не работает даже если явно унаследовать class object от jet.Function1. Кстати, не понятно почему.
А в чем неудобства с импортом?
Ошибся: функция может быть объявлена прямо в пакете.
Я вот читаю новости про новый язык и думаю: с одной стороны, как Java-разработчик, я вас поддерживаю — самого раздражают многие ограничения Java. С другой стороны — разве все баги в IDEA уже пофикшены? И возникает возмущение — как же так, не могут пофиксить давний баг, который лично мне мешает, но при этом тратят силы на еще один язык.

Scala придумали в 2003, и до сих пор в компиляторе находят баги. Некоторые баги в IDEA живут годами. Отсюда делается вывод, что баги в Kotlin тоже будут жить годами. А ведь баг в языке гораздо серьезней бага в IDE.
Kotlin позиционировался как средства дальнейшей разработки IDEA.
Если он повысит эффективность разработки, то повысится и скорость исправления багов в IDEA.

Это как утверждать, что рефакторинг вреден, так как вместо него можно было бы фиксить баги.

Кстати, баги в компиляторе scala довольно не критичны. Да, на них можно наткнуться, но не то, чтобы просто.
Sign up to leave a comment.