
Ivan
02.02.2018
05:56:43
у других языков мало что есть противопоставить этому:
for comprehension, destructuring, pattern matching, flow typing, immutability by default, data objects, null safety, get/set/POJO infrastructure generate by default
и это только что навскидку, там много чего еще

Boris
02.02.2018
06:19:47

Oleg
02.02.2018
07:26:09
Не гуглится

Google

Igor
02.02.2018
07:26:59

Ivan
02.02.2018
07:31:58
https://en.wikipedia.org/wiki/Flow-sensitive_typing
https://try.kotlinlang.org/#/Kotlin%20Koans/Introduction/Smart%20casts/Task.kt
https://kotlinlang.org/docs/reference/typecasts.html

Oleg
02.02.2018
07:32:39
ясн, спасибо

Руслан
02.02.2018
07:43:55
@angmarr баян?
Каррирование конструктора ??

Igor
02.02.2018
07:47:28

Руслан
02.02.2018
07:47:55
Да вот с утра что-то в голову ударило и написал на 40 строк "либу"
https://gist.github.com/IRus/68f2e811592b9dd3b18dabe68116c964


Vladislav
02.02.2018
07:50:55
Привет. Не могу ответ с сервера обработать. Получаю ошибку.
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $
Ответ приходит в виде:
"{\"id\":2,\"email\":\"forojoo@gmail.com\",\"first_name\":\"Vladislav\",\"last_name\":\"Lebyodkin\",\"patronymic_name\":\"Igorevitch\",\"roles\":[]}"
Interface:
@GET("api/user/get")
fun get_user (@Header("Authorization")header:String):Observable<GetUser>
Data class
data class GetUser (val id: Long, val email: String, val first_name: String, val last_name: String,val patronymic_name:String, val roles: List<String>)
Запрос
val call = api.get_user(token)
call.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(
{ GetUser ->
Log.d("Test", GetUser.email)
},
{ error ->
Log.d("Error", error.message)
}
)
Спасибо.

Google


Boris
02.02.2018
07:51:56
Привет. Не могу ответ с сервера обработать. Получаю ошибку.
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $
Ответ приходит в виде:
"{\"id\":2,\"email\":\"forojoo@gmail.com\",\"first_name\":\"Vladislav\",\"last_name\":\"Lebyodkin\",\"patronymic_name\":\"Igorevitch\",\"roles\":[]}"
Interface:
@GET("api/user/get")
fun get_user (@Header("Authorization")header:String):Observable<GetUser>
Data class
data class GetUser (val id: Long, val email: String, val first_name: String, val last_name: String,val patronymic_name:String, val roles: List<String>)
Запрос
val call = api.get_user(token)
call.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(
{ GetUser ->
Log.d("Test", GetUser.email)
},
{ error ->
Log.d("Error", error.message)
}
)
Спасибо.
Gist
Привет. Не могу ответ с сервера обработать. Получаю ошибку.
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $
Ответ приходит в виде:
"{\"id\":2,\"email\":\"forojoo@gmail.com\",\"first_name\":\"Vladislav\",\"last_name\":\"Lebyodkin\",\"patronymic_name\":\"Igorevitch\",\"roles\":[]}"
Interface:
@GET("api/user/get")
fun get_user (@Header("Authorization")header:String):Observable<GetUser>
Data class
data class GetUser (val id: Long, val email: String, val first_name: String, val last_name: String,val patronymic_name:String, val roles: List<String>)
Запрос
val call = api.get_user(token)
call.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(
{ GetUser ->
Log.d("Test", GetUser.email)
},
{ error ->
Log.d("Error", error.message)
}
)
Спасибо.
Это хоть что такое тооооо?


Vladislav
02.02.2018
07:53:42
Запрос же)

Костя
02.02.2018
07:53:46
Привет. Не могу ответ с сервера обработать. Получаю ошибку.
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $
Ответ приходит в виде:
"{\"id\":2,\"email\":\"forojoo@gmail.com\",\"first_name\":\"Vladislav\",\"last_name\":\"Lebyodkin\",\"patronymic_name\":\"Igorevitch\",\"roles\":[]}"
Interface:
@GET("api/user/get")
fun get_user (@Header("Authorization")header:String):Observable<GetUser>
Data class
data class GetUser (val id: Long, val email: String, val first_name: String, val last_name: String,val patronymic_name:String, val roles: List<String>)
Запрос
val call = api.get_user(token)
call.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(
{ GetUser ->
Log.d("Test", GetUser.email)
},
{ error ->
Log.d("Error", error.message)
}
)
Спасибо.
В ответе слэши наверно мешают

Boris
02.02.2018
07:54:40

Костя
02.02.2018
07:55:07
Ретрофит и okhttp наверное

Руслан
02.02.2018
07:55:08

Vladislav
02.02.2018
07:55:55
ретрофит, okhttp, rxjava

Boris
02.02.2018
07:56:00

Andrew
02.02.2018
07:56:22
Дык эт самое, вам приходит JSON-строка, а вы объект парсить пытаетесь?

Руслан
02.02.2018
07:56:35
Ну и если не андроид, то и на сервере вполне ок.

Boris
02.02.2018
07:57:33

Руслан
02.02.2018
07:58:11
А в основном же ты поднял "контекст" один раз и юзаешь его

Boris
02.02.2018
07:58:54

Руслан
02.02.2018
08:00:15

Boris
02.02.2018
08:01:20
Просто не понимаю, что ты выигрываешь
Это ты хочешь вместо ди использовать?

Google

Руслан
02.02.2018
08:01:59
Да
Но вообще конечно тема с интерфейсами все портит, а они нужны чтобы типы аргументов вытащить
Плохая идея в общем

Boris
02.02.2018
08:03:56

Vladislav
02.02.2018
08:06:14

Kira
02.02.2018
08:08:37
Хочу каррирование в коте.. просто так..

Igor
02.02.2018
08:10:47

Pavel
02.02.2018
08:40:38

Igor
02.02.2018
08:49:42
Так язык с перегрузкой методов и дефолтными параметрами - тут автокарирование не завести. Даже скала не смогла.
(да и не нужно оно тут почти ни кому, это же инструмент ФП)

Anatoliy
02.02.2018
09:01:05
Всем привет!
Кто-нибудь знает, как справится с проблемой когда отладчик не останавливается на брейкпойнтах в INLINE функциях?
Или придется ждать обновлений студии и котлина?

Quantum Harmonizer
02.02.2018
09:07:23

Anatoliy
02.02.2018
09:24:07

Quantum Harmonizer
02.02.2018
09:24:41

Anatoliy
02.02.2018
09:25:41
Я тоже порыл гугл и нашел, что с инлайном трабла в том, что брейкпойнт по факту будет попадать в "левый" код
/*inline*/ fun
Но это же ППЦ!
1. Это неудобно
2. Может быть много функций
3. Самое важное, что логика кода при этом сильно поменяется

Kira
02.02.2018
09:29:00
Зачастую это просто невозможно

Anatoliy
02.02.2018
09:29:24
Невозможно что, поменять?

Kira
02.02.2018
09:29:32
В инлайне работа с женериками другая

Anatoliy
02.02.2018
09:30:19
Да в инлайн элементарный return иначе работает

Google

Anatoliy
02.02.2018
09:33:52

Михаил
02.02.2018
09:37:32
Инлайнить руками через ctrl c - ctrl v

Anatoliy
02.02.2018
09:45:55
В топку котлин тогда, пиши на яве)

Сергей
02.02.2018
09:47:31
ява эт пздц

Dibro
02.02.2018
09:56:06
думаю могли бы в будущем сделать опцию, чтобы при компиляции для дебага вызовы инлайн методов заменялись обычными (такие же вроде у всех инлайн методов генерятся, чтоб из джавы вызвать можно было), а их уже спокойно дебажить

Sergey
02.02.2018
10:10:57
-Xno-inline
(такая опция есть)

Dibro
02.02.2018
10:19:16
тогда можно сделать её автовключение при дебаге

Alex
02.02.2018
10:27:13
thread(start = true) {
var loop = 0
do {
if (x > y) {
// здесь что-то
break
} else {
Thread.sleep(5000)
}
loop++
} while (loop < 4)
}
подскажите плз, если делаю такую конструкцию, то из-за thread.sleep валятся ANR в консоли гугла

Anatoliy
02.02.2018
10:28:46
Я что-то не понимаю или как?
На сколько я знаю, инлайн функция в байткоде выглядит не как вызов функции, а как обычный копипаст кода.
Потому там есть плюшачки как функции, так и обычного кода.
Если инлайн превратиться в обычную функцию, то часть плюшек потеряется.
Или я не прав?

Quantum Harmonizer
02.02.2018
10:32:17

Alex
02.02.2018
10:32:40
а если вместо Thread.sleep сделать так:
thread(start = true) {
var loop = 0
do {
if (x > y) {
// здесь что-то
break
} else {
Handler().postDelayed({
// .........
}, 5000)
}
loop++
} while (loop < 4)
}
то ругается на Can't create handler inside thread that has not called Looper.prepare()

Quantum Harmonizer
02.02.2018
10:33:08
кстати, есть @kotlin_mobile

Alex
02.02.2018
10:33:30
спасибо

Dibro
02.02.2018
10:33:32

Quantum Harmonizer
02.02.2018
10:33:40

Google

Dibro
02.02.2018
10:34:20

Quantum Harmonizer
02.02.2018
10:34:46

Anatoliy
02.02.2018
10:35:11

Dibro
02.02.2018
10:36:28
надо посмотреть во что компилится инлайн с нелокальными возвратами

Quantum Harmonizer
02.02.2018
10:38:03

Dibro
02.02.2018
10:40:57
тоже работает

Quantum Harmonizer
02.02.2018
10:42:00
В моём примере получается TypeToken<List<String>>, в твоём — TypeToken<Object>.
Проверить можно на TypeToken из Guava или Gson.

Dibro
02.02.2018
10:50:51
да, действительно

Andrew
02.02.2018
10:53:19
Если бы reified можно было без проблем сделать для не-inline функций, его бы наверняка сделали. А вы тут как раз это и обсуждаете.
В теории можно было бы, конечно, поступить как в плюсах с шаблонами -- генерить по новому методу на каждый тип, плюс смапить номера строк для дебаг инфо, но я полагаю, что предугадать все возможные вызовы в компайл-тайме для жвм невозможно.
Ещё, конечно, можно в дебаг-билдах на борту таскать с собой компилятор... :D