@kotlin_lang

Страница 453 из 982
Boris
12.12.2017
17:34:14
Внимание, сейчас будет вопрос - "Так себе"!) Можно ли написать условие boolean так чтобы оно мол типо проверяло если это последний элемент в списке?)
Вопрос более чем так себе, он совсем никак. Из него невозможно понять вообще ничего. Что за лист, в какой момент нужно понять, зачем? Последним обычно является последний в списке. И как тут выше написали, его можно получить просто вызвав list.last(). В отличии от массива где можно интерпретировать по-другому понятие последнего.

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
«Хочу что-бы можно было так» — это очень плохая постановка задачи. https://kotlinlang.org/docs/reference/lambdas.html
Но мы же можем так : button.setOnClickListener{ onMyClickListener() } Пожалуйста, уже час бьюсь! Почему в моём первом случае не выходит?

Google
Boris
12.12.2017
18:34:11
тут дело в том, что САМ-а для котлиновских интерфейсов не завезли

так что рекомендую объявить typealias Callback = ()->Unit и наслаждаться

или даже не объявлять, а просто сделать тип колбека не callback: Callback а callback: ()->Unit

Boris
12.12.2017
18:51:52
Ура!!! Спасибо!
Пожалуйста

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
почему-то джависты переходящие в котлин привыкли к костылю и реквестируют это фичу в котлине
А некоторые поехавшие еще в стайл-гайдах пишут - что лямбды надо вызвать через x.invoke(…) ?‍♂️ (чувачки из одного android-бодишопа)

Igor
12.12.2017
19:20:30
Так что как бы да, никто ничего не обещал, но почему бы и нет, если восстребовано комюнити?
Вот сразу видно android-юзеров: - в бэкграунде ничего кроме Java 1.6 - норм. языков с лямбдами они в глаза не видели (типа Scala/C#) (хотел ими это тогда напасть, но в android-arch-чате это смотрелось бы станно)

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
Надо бота написать, который будет это вырезать (и автора в бан кидать (но это уже опционально)) ?

Quantum Harmonizer
12.12.2017
19:38:01
почему-то джависты переходящие в котлин привыкли к костылю и реквестируют это фичу в котлине
Ещё один нюанс — лямбды представлены generic-интерфейсами, где имеют место bridge-методы. Так что в каких-нибудь Android-библиотеках я использую интерфейс + crossinline-адаптер.

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
Знаю что не по теме, но всё же, какой язык программирования выбрать для создания лаунчера под андроид?

Vitalii
13.12.2017
07:21:30
Знаю что не по теме, но всё же, какой язык программирования выбрать для создания лаунчера под андроид?
Если с нуля, то котлин, но если у тебя немного опыта/времени, да и если появился такой вопрос, то Java и взять за основу код Launcher3.

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 отрицательные значения, они не падают, почему?

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 ничего не понятно.

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

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

Quantum Harmonizer
13.12.2017
13:34:32
@Harmonizr так это и есть метод
Не понятен ни порядок аргументов, ни какое выражение возвращается.

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

Admin
ERROR: S client not available

Quantum Harmonizer
13.12.2017
13:35:19
@angmarr в лок это типо gist?
локальные переменные

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

Руслан
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
@HeapyHop у меня тест допускает возможность сэтить отрицательные значения для startAngle и sweepAngle
> но почему то по-прежнему в тестах где задаю значения a и b отрицательные значения, они не падают, почему? почему они должны падать? ?

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
Т.е. ты хочешь зависимые типы?
Кстати о птичках. Про ULong/UInt/UShart/UByte все уже забыли? Никому не надо?

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

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

Руслан
13.12.2017
13:46:31
@HeapyHop эм, не уверен что понял вас сейчас)
короче, перед эти ифом сделай проверку и кидай эксепшен если проверка не пройдена. в чем проблема?

Кстати о птичках. Про ULong/UInt/UShart/UByte все уже забыли? Никому не надо?
Мне кажется примерно там же где SAM для интерфейсов

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

Руслан
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)

Страница 453 из 982