
Boris
12.12.2017
17:34:14

Sankarsana das
12.12.2017
18:24:05
Пожалуйста, помогите разобраться!
interface Example {
fun someFun(callback: Collback)
interface Collback {
fun onCallback()
}
}
class ExampleImpl : Example(){}
Хочу что-бы можно было так:
...{
fun callback(){...}
ExampleImpl().someFun{callback()}
}

Quantum Harmonizer
12.12.2017
18:26:48

Sankarsana das
12.12.2017
18:32:37

Google

Boris
12.12.2017
18:34:11
тут дело в том, что САМ-а для котлиновских интерфейсов не завезли
так что рекомендую объявить typealias Callback = ()->Unit и наслаждаться
или даже не объявлять, а просто сделать тип колбека не callback: Callback а callback: ()->Unit

Sankarsana das
12.12.2017
18:37:34

Boris
12.12.2017
18:51:52

Sankarsana das
12.12.2017
19:00:02

Igor
12.12.2017
19:07:47
В Kotlin - НЕ НУЖНО, есть first-class-citizen лямбды

Sankarsana das
12.12.2017
19:10:38
Можете по подробнее?

Руслан
12.12.2017
19:12:36
Можете по подробнее?
ну вот выше показали что достаточно объявить функциональный тип () -> Unit, чтобы передавать лямбду. SAM - в свою очередь костыль чтобы поддержать лямбды в джаве

Artyom
12.12.2017
19:12:56

Руслан
12.12.2017
19:13:02
почему-то джависты переходящие в котлин привыкли к костылю и реквестируют это фичу в котлине
Обещали добавить потом
Насколько я понимаю никто ничего не обещал, во всяком случае я не видел где такое было. Если речь про опросник приуроченный к Kotlin 1.1, то там обещания не было.

Artyom
12.12.2017
19:14:59
Там они только выкинули лист с наиболее популярными, и там оно есть

Google

Artyom
12.12.2017
19:15:29
Так что как бы да, никто ничего не обещал, но почему бы и нет, если восстребовано комюнити?

Руслан
12.12.2017
19:17:48

Igor
12.12.2017
19:18:04

Artyom
12.12.2017
19:19:47

Igor
12.12.2017
19:20:30

Artyom
12.12.2017
19:21:55
У меня коллеги все ещё коллбеки делают интерфейсами. Для них не очевидны лямбды.
Так что ясно откуда такая "восстребованость".

Anton
12.12.2017
19:22:48
А некоторые поехавшие еще в стайл-гайдах пишут - что лямбды надо вызвать через x.invoke(…) ?♂️
(чувачки из одного android-бодишопа)
Отож. Придут понимаешь, понапишут своих кодов всяких, и уйдут. А invoke - стильно, модно, почти молодежно, а главное единообразно. Что-то мне подсказывает что в бодишопах единообразие ценится очень сильно.
P.S. На правах шутки, есвенно. В которой как известно, доля шутки
P.S.S Имелось ввиду наверное не совсем бодишоп, а аутсорс что-нибудь? бодишопу ведь по-барабану, он сдает в аренду, код не пишет.

Anton
12.12.2017
19:26:34
Давайте ещё кто нибудь стату запросите

Igor
12.12.2017
19:27:28
Надо бота написать, который будет это вырезать (и автора в бан кидать (но это уже опционально)) ?

Anton
12.12.2017
19:27:49
И телефон взрывать

Quantum Harmonizer
12.12.2017
19:38:01

Dibro
12.12.2017
20:20:55
подскажите, где можно почитать про Contracts DSL? и что это вообще такое

Kirill
12.12.2017
20:25:06
cc @dsavvinov :)

Dmitry
12.12.2017
20:29:22
Пока что нигде. Она пока что в крайне экспериментальном состоянии. Но вообще это система для того, чтобы анализ компилятора становился "умней"

V
13.12.2017
05:23:28
https://3dnews.ru/962718
Котлин там в претендентах

Stepan
13.12.2017
06:02:03
Ребята, дайте пожалуйста ссылку на чатик котлина в мобилках

Google

Abdullo
13.12.2017
06:03:17
https://t.me/kotlin_mobile

Stepan
13.12.2017
06:06:08
Спасибо

Kirill
13.12.2017
06:22:44
Знаю что не по теме, но всё же, какой язык программирования выбрать для создания лаунчера под андроид?

Quantum Harmonizer
13.12.2017
07:04:47

Vitalii
13.12.2017
07:21:30

Farid
13.12.2017
07:23:17
Я так понимаю: Котлин в действии пока появился в виде сканов страниц, а стандартного электронного издания не выходило? И сроков выхода нет?

Alexander
13.12.2017
07:24:49
электронное издание давно вышло. Можно купить на сайте

Sergey
13.12.2017
07:38:01
https://blog.jetbrains.com/kotlin/2017/12/webinar-recording-developing-multiplatform-projects-in-kotlin-1-2/

Konstantine
13.12.2017
12:29:35
Ребят, такой вопрос, синглтоны (object) потокобезопасны или нет?

Hleb
13.12.2017
12:32:56
Да

Konstantine
13.12.2017
12:38:50
Отлично, спасибо

Vadim
13.12.2017
13:28:15
Делемка
пишу условие мол
if ((a + b) >= some || (a>0)&&(b>0)) someFun()
но почему то по-прежнему в тестах где задаю значения a и b отрицательные значения, они не падают, почему?

Quantum Harmonizer
13.12.2017
13:30:15

Vadim
13.12.2017
13:30:41
это kotlin, просто написал шустро на свой лад, чтоб не грузить переменными.

Anton
13.12.2017
13:30:43
точно перл))

Vadim
13.12.2017
13:31:53
ой всё )
если по русски
if ((startAngle + sweepAngle) >= MAX_ANGLE + CHART_START_ANGLE - OFFSET_BETWEEN_SECTORS
|| (startAngle > 0 && sweepAngle > 0))
MAX_ANGLE + CHART_START_ANGLE - startAngle - OFFSET_BETWEEN_SECTORS
и вот сама проверка в тесте
assertEquals(-220f, helper.calculateSweepAngle(-570f, -220f))
где он собственно и должен валиться.

Quantum Harmonizer
13.12.2017
13:32:52
Без исходника calculateSweepAngle ничего не понятно.

Igor
13.12.2017
13:33:41

Vadim
13.12.2017
13:33:50
@Harmonizr так это и есть метод

Руслан
13.12.2017
13:33:53

Google

Руслан
13.12.2017
13:34:03
случайно не перепутал знак?

Quantum Harmonizer
13.12.2017
13:34:32

Vadim
13.12.2017
13:34:51
@angmarr в лок это типо gist?

Admin
ERROR: S client not available

Quantum Harmonizer
13.12.2017
13:35:19

Vadim
13.12.2017
13:35:47
@HeapyHop нет, мне нужно значения только больше 0 но никак не отрицательные

? animufag ?
13.12.2017
13:36:37

Руслан
13.12.2017
13:37:09
А, так это. Ты же со float работает. delta укажи

Vadim
13.12.2017
13:37:30
вот, сделал как умею))
https://gist.github.com/mnewlive/cdc479e4ecc1177948813c8268055913
напоминаю при отрицательных значениях, тест должен валиться, так как они мне не нужны)

Руслан
13.12.2017
13:39:02
эм, что значит "тест валиться"? у тебя же тест проверяет что у тебя вернулось отрицательное значение

Igor
13.12.2017
13:40:36
@angmarr в лок это типо gist?
Это в смысле
val CONST = MAX_ANGLE + CHART_START_ANGLE - OFFSET_BETWEEN_SECTORS
fun calculateSweepAngle(startAngle: Float, sweepAngle: Float) {
val angel = startAngle + sweepAngle
if (angel >= CONST || startAngle > 0 && sweepAngle > 0)
CONST - startAngle
// ...

Vadim
13.12.2017
13:41:45
@HeapyHop у меня тест допускает возможность сэтить отрицательные значения для startAngle и sweepAngle
@angmarr ну или так) по моему у меян тоже ничего так получилось)

Руслан
13.12.2017
13:42:40

Vadim
13.12.2017
13:43:36
ну я хочу чтобы они падали)
поэтому и прошу помочь откорректировать условие при котором я не смогу принимать в качестве аргументов отрицателньые значения.

Руслан
13.12.2017
13:43:56
Т.е. ты хочешь зависимые типы?

Andrey
13.12.2017
13:45:40
Непонятны бизнес требования к этой функции, и что такое "не смогу принимать отрицательные значения"

Vadim
13.12.2017
13:45:50
@HeapyHop эм, не уверен что понял вас сейчас)

Igor
13.12.2017
13:45:51

Google

Andrey
13.12.2017
13:46:10
У него ж там флоат

Igor
13.12.2017
13:46:27
Я так просто вспомнил. На заре котлина что такое обсуждали.

Руслан
13.12.2017
13:46:31

Vadim
13.12.2017
13:48:01
@atapin глядите, возможно я как то неправильно объясняю, но суть проста
я хочу в данном методе рассматривать только положительные значения для аргументов startAngle/sweepAngle
на тест можете не смотреть, просто в методе, на данный момент что то идёт не так
возможно стоит вынести дополнительно условием мол
else if (startAngle < 0 && sweepAngle < 0 ) return

Igor
13.12.2017
13:49:06

Руслан
13.12.2017
13:50:13
fun calculateSweepAngle(startAngle: Float, sweepAngle: Float) {
if (startAngle < 0 || sweepAngle < 0) throw IllegalArgumentException("Start angel and sweep angle should be positive.")
val someConst = MAX_ANGLE + CHART_START_ANGLE - OFFSET_BETWEEN_SECTORS
return if ((startAngle + sweepAngle) >= someConst || (startAngle < 0 && sweepAngle < 0))
someConst - startAngle
else sweepAngle
}

Igor
13.12.2017
13:50:25

Руслан
13.12.2017
13:51:12

Vadim
13.12.2017
13:53:34
@HeapyHop по-моему чётко) я как то об Exception'e и не подумал, благдарю))

Руслан
13.12.2017
13:54:49
Просто для каких-то базовых случаев вполне можно писать методы-гуарды и мне кажется достаточно просто научить IDE подсвечивать:
fun positiveInt(value: Int): Int =
if (value < 0) throw IllegalStateException() else value
positiveInt(-1)