@kotlin_lang

Страница 468 из 982
Quantum Harmonizer
27.12.2017
16:22:20
Вызываешь первичный конструктор из вторичного — получаешь выполнение init.

Igor
27.12.2017
18:34:38
Видео со встречи с Романом Елизаровым, посвященной корутинам в Котлине, готово! Часть 1: youtu.be/HYhJmK9nKS4 Часть 2: youtu.be/fd9EVSxINKw

Hleb
27.12.2017
18:34:48
ееее

nikita
27.12.2017
18:38:34
супер оперативность! ?

Google
Bogdan
27.12.2017
18:46:38
блин... у меня была работа

прийдется ей подождать

Anton
27.12.2017
18:49:34
оперативненько

Igor
27.12.2017
19:13:27
Парни подскажите момент Есть 10 users (list) и каждого юзера есть 10 books (list) Нужно найти первую попавшуюся книгу по названию. Как бы это поэлегантней сделать.
Если ты напишешь просто два вложенных for, то IDEA сама тебе преложит трасформировать его в users .flatMap(User::books) .firstOrNull(condition) или users .asSequence() .flatMap { it.books.asSequence() } .firstOrNull { condition(it) } Если для тебя не особо важен перформанс (всего-то ~100 элементов), я бы предложил на этом и остановиться (HotSpot все равно это оптимизирует) Хотя есть еще пару идеек, как уменьшить кол-во аллокаций.

Siarhei
27.12.2017
19:43:28
https://kotlinlang.org/docs/reference/delegated-properties.html#providing-a-delegate-since-11
спасибо, не задумывался, что можно доставать из KProp имя переменной, круто :)

интересно, как с proGuard-ом дружить это дело будет

Quantum Harmonizer
27.12.2017
19:44:57
интересно, как с proGuard-ом дружить это дело будет
идеально, там никакой рефлексии

Siarhei
27.12.2017
19:45:39
то есть, прогард изменит имя переменной, но проп.нейм останется прежним?

Quantum Harmonizer
27.12.2017
19:47:59
Более того, имён локальных переменных может вообще не быть — а имя в KProperty останется.

Siarhei
27.12.2017
19:51:23
а что будет там?

всмысле в prop.name в таком случае

Quantum Harmonizer
27.12.2017
19:51:52
имя переменной из исходника :)

Google
Siarhei
27.12.2017
20:04:20
а блин, я чет магию представил какую-то

а тут всё топорно просто ))

Михаил
27.12.2017
20:14:44
а тут всё топорно просто ))
Это называют компиляторной магией)

Bogdan
27.12.2017
20:22:40
Это называют компиляторной магией)
котлин это как раз и есть компиляторная магия

Quantum Harmonizer
27.12.2017
21:01:32
котлин это как раз и есть компиляторная магия
*компилятор — это как раз и есть компиляторная магия

Igor
28.12.2017
00:19:06
Хай... Вопрос по Dagger2 и Kotlin. Как проижектить @Named зависимость в конструктор?

Михаил
28.12.2017
00:24:32
также как и в джаве

Igor
28.12.2017
00:28:24
ок... спасибо

ато чет пишут про страшную штуку для филда, тиа @field:[Named(name)] lateinit val varname

Михаил
28.12.2017
00:29:53
это если инжектишь через инъекцию поля

в конструкторе можно не прописывать @field:

вообще почему так?  он ведь вроде по умолчанию к полю должен применится

Igor
28.12.2017
00:35:34
я пока разбираюсь, что-то мешает сборке, а что пока не пойму

olzhas
28.12.2017
04:01:30
fun main(args: Array<String>) { class B<out T:Any>(val value:T) fun <T:Any> B<T>.printB(v:T) { print("${this.value} $v") } val b1 = B(20) val b2 = B(30) b1.printB(b2) }

Почему у меня этот код компилируется и работает?

я хочу что бы метод b1.printB() принимал только Int

DY
28.12.2017
04:22:29
class B<T:Any>(val value: T)

olzhas
28.12.2017
04:33:03
Да это помогло, спасибо.

Alexey
28.12.2017
05:28:05
Столкнулся с проблемой при работе с сокетами. Один и тот же код на яве работает а на котлине нет) Пытаюсь отправить документ на принтер через сокет. Записываю данные в socket.getOutputStream(). Так вот на яве все проходит гладко, а на котлине документ распечатывается, но вылетает exception SocketException: sendto failed: EBADF (Bad file descriptor) не знаю как с этим быть, хочется все написать на котлине, может кто знает в чем может быть причина?

Евгений
28.12.2017
05:28:51
еще бы код посмотреть

Google
Alexey
28.12.2017
05:30:04
ща

public class Printer { public enum PaperSize { A4, A5 } public Single<String> print(final String printerIP, final int printerPort, final File file, final String filename, final PaperSize paperSize, final int copies) { return Single.create(new SingleOnSubscribe<String>() { @Override public void subscribe(SingleEmitter<String> emitter) throws Exception { Socket socket = null; DataOutputStream out = null; FileInputStream inputStream = null; try { socket = new Socket(printerIP, printerPort); out = new DataOutputStream(socket.getOutputStream()); DataInputStream input = new DataInputStream(socket.getInputStream()); inputStream = new FileInputStream(file); byte[] buffer = new byte[3000]; final char ESC = 0x1b; final String UEL = ESC + "%-12345X"; final String ESC_SEQ = ESC + "%-12345\r\n"; out.writeBytes(UEL); out.writeBytes("@PJL \r\n"); out.writeBytes("@PJL JOB NAME = '" + filename + "' \r\n"); out.writeBytes("@PJL SET PAPER=" + paperSize.name()); out.writeBytes("@PJL SET COPIES=" + copies); out.writeBytes("@PJL ENTER LANGUAGE = PDF\r\n"); while (inputStream.read(buffer) != -1) out.write(buffer); out.writeBytes(ESC_SEQ); out.writeBytes("@PJL \r\n"); out.writeBytes("@PJL RESET \r\n"); out.writeBytes("@PJL EOJ NAME = '" + filename + "'"); out.writeBytes(UEL); out.flush(); } catch (IOException e) { e.printStackTrace(); emitter.onError(e); } finally { try { if (inputStream != null) inputStream.close(); if (out != null) out.close(); if (socket != null) socket.close(); emitter.onSuccess("Succ"); } catch (IOException e) { e.printStackTrace(); emitter.onError(e); } } } }); } }

это ява

class Printer2 { enum class PaperSize { A4, A5 } fun print(printerIP: String, printerPort: Int, file: File, filename: String, paperSize: PaperSize, copies: Int): Single<String> { return Single.create<String> { emitter -> try { Socket(printerIP, printerPort).use { socket -> DataOutputStream(socket.getOutputStream()).use { out -> val ESC: Char = 0x1b.toChar() val UEL = ESC + "%-12345X" val ESC_SEQ = ESC + "%-12345\r\n" out.writeBytes(UEL) out.writeBytes("@PJL \r\n") out.writeBytes("@PJL JOB NAME = '$filename' \r\n") out.writeBytes("@PJL SET PAPER=" + paperSize.name) out.writeBytes("@PJL SET COPIES=" + copies) out.writeBytes("@PJL ENTER LANGUAGE = PDF\r\n") out.write(file.readBytes()) out.writeBytes(ESC_SEQ) out.writeBytes("@PJL \r\n") out.writeBytes("@PJL RESET \r\n") out.writeBytes("@PJL EOJ NAME = '$filename'") out.writeBytes(UEL) emitter.onSuccess("Success printing") } } } catch (e: Exception) { emitter.onError(e) } } } }

котлин

На котлине когда падает, ругается на эту строку : out.writeBytes(ESC_SEQ)

Roman
28.12.2017
06:07:37
Почему падает я не знаю, но строчка out.write(file.readBytes()) это не одно и то же, что на яве. На котлине надо так: fileInputStream.copyTo(out, bufferSize = 3000)

Roman
28.12.2017
06:17:59
Так не правильно. Если файл будет большой, такой код потребует много памяти, кроме того я не знаю как сокет отреагирует на запсиь сразу огромного куска.

А вот copyTo будет кушать не более bufferSize памяти для своей работы.

Alexey
28.12.2017
06:19:06
Ок, попробую так написать

Admin
ERROR: S client not available

Boris
28.12.2017
06:22:05
@aleexey было бы лучше большие куски кода выкладывать на гист или пейстбин какой-нибудь

Sergey8827
28.12.2017
09:30:33
Котлин почему тытак ущербен? Я просто хочу создать массив строк но я не могу даже загуглить как это сделать. ЧТО?

Vladislav
28.12.2017
09:30:53
arrayOf

Sergey8827
28.12.2017
09:30:58
на яве это сделать закрытыми глазами может новичек

arrayOf
arrayOf ()<String> { MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TRACK, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.YEAR }

не вышло...

Google
Sergey8827
28.12.2017
09:31:43
еще варианты?

Islam
28.12.2017
09:31:47
arrayOf("", "")

Sergey8827
28.12.2017
09:31:56
ясно спс

Islam
28.12.2017
09:32:01
Все намного проще)

Vitalii
28.12.2017
09:32:13
еще варианты?
Документация? https://kotlinlang.org/docs/reference/basic-types.html "To create an array, we can use a library function arrayOf() and pass the item values to it, so that arrayOf(1, 2, 3) creates an array [1, 2, 3]. Alternatively, the arrayOfNulls() library function can be used to create an array of a given size filled with null elements."

Vladislav
28.12.2017
09:32:21
("1", "2")

можно ввести в гугле kotlin arrays

и всё в доках)

Sergey8827
28.12.2017
09:32:49
Все намного проще)
ну да как сказать - например для массива байтов нужно ByteArray

Vitalii
28.12.2017
09:33:03
Нет, мы не хотим читать доку, мы хотим хуяк-хуяк
Мы хотим котлин ущербным называть.

Евгений
28.12.2017
09:33:28
вспышки что ли на солнце?

чот все нервные какие-то

Sergey8827
28.12.2017
09:34:02
зачем 100 млн способов просто создавать массив?

?

у них там ФЕТИШ?

Евгений
28.12.2017
09:34:40
вроде arrayOf один такой

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