Size: a a a

Kotlin Community

2020 July 30

BP

Bogdan Panchenko in Kotlin Community
Для lazy есть делегат
источник

BP

Bogdan Panchenko in Kotlin Community
Александр Порохин
Ну тогда lazy - фууу, да здравствует святой null!
Фуу мутировать структуру из вне 🌚
источник

АП

Александр Порохин... in Kotlin Community
Bogdan Panchenko
Фуу мутировать структуру из вне 🌚
В смысле мутировать. А инициализировать она сама себя будет? И вообще  значит, использовать lateinit только для джавовских фреймворков можно? Для этого этот костыль придуман?
источник

АП

Александр Порохин... in Kotlin Community
Я правильно понял, что это моветон?
источник

BP

Bogdan Panchenko in Kotlin Community
Александр Порохин
В смысле мутировать. А инициализировать она сама себя будет? И вообще  значит, использовать lateinit только для джавовских фреймворков можно? Для этого этот костыль придуман?
Конструктор вам начто ?
источник

АП

Александр Порохин... in Kotlin Community
Bogdan Panchenko
Конструктор вам начто ?
Просто задача стоит строить объект по кускам. Парсер считывает файл, и отдельные куски там могут быть, а могут не быть
источник

AM

Andrew Mikhaylov in Kotlin Community
Александр Порохин
Просто задача стоит строить объект по кускам. Парсер считывает файл, и отдельные куски там могут быть, а могут не быть
А что вам мешает в классе рядом с пропертёй завести
val myFieldInitialized: Boolean
   get() = ::myField.isInitialized

?
источник

АП

Александр Порохин... in Kotlin Community
Andrew Mikhaylov
А что вам мешает в классе рядом с пропертёй завести
val myFieldInitialized: Boolean
   get() = ::myField.isInitialized

?
Увеличение количества пропертей в 2 раза. Я не стал заморачиваться. Просто в классе сразу проинициализировал обьект дефолтными данными
источник

AM

Andrew Mikhaylov in Kotlin Community
Александр Порохин
Увеличение количества пропертей в 2 раза. Я не стал заморачиваться. Просто в классе сразу проинициализировал обьект дефолтными данными
Тоже вполне себе опция, да.
источник

AK

Artyom Karnov in Kotlin Community
Ребят, а чем вызвано ограничение, что я не могу использовать метод референс в лямбде если у метода есть значение по умолчанию?

Например:
class Exmpl {
   fun m(s: String, i: Int = 0): String {
       return s+i
   }


   fun process(list: List<String>): List<String> {
       return list.map(this::m) //<--no way
   }
}
источник

КР

Кирилл Романенко... in Kotlin Community
Artyom Karnov
Ребят, а чем вызвано ограничение, что я не могу использовать метод референс в лямбде если у метода есть значение по умолчанию?

Например:
class Exmpl {
   fun m(s: String, i: Int = 0): String {
       return s+i
   }


   fun process(list: List<String>): List<String> {
       return list.map(this::m) //<--no way
   }
}
Попробуй декомпилировать этот кусок и посмотреть на реализацию.)
источник

СТ

Сергей Троян... in Kotlin Community
выглядит как недоделка языка

основная фишка параметров по умолчанию, что их можно добавить потом, не ломая предыдущие вызовы

а тут получается нельзя
источник

AK

Artyom Karnov in Kotlin Community
public final class Exmpl {
  @NotNull
  public final String m(@NotNull String s, int i) {
     Intrinsics.checkParameterIsNotNull(s, "s");
     return s + i;
  }

  // $FF: synthetic method
  public static String m$default(Exmpl var0, String var1, int var2, int var3, Object var4) {
     if ((var3 & 2) != 0) {
        var2 = 110;
     }

     return var0.m(var1, var2);
  }

  @NotNull
  public final List process(@NotNull List list) {
     Intrinsics.checkParameterIsNotNull(list, "list");
     Iterable $this$map$iv = (Iterable)list;
     int $i$f$map = false;
     Collection destination$iv$iv = (Collection)(new ArrayList(CollectionsKt.collectionSizeOrDefault($this$map$iv, 10)));
     int $i$f$mapTo = false;
     Iterator var7 = $this$map$iv.iterator();

     while(var7.hasNext()) {
        Object item$iv$iv = var7.next();
        String it = (String)item$iv$iv;
        int var10 = false;
        String var12 = m$default(this, it, 0, 2, (Object)null);
        destination$iv$iv.add(var12);
     }

     return (List)destination$iv$iv;
  }
}
источник

AK

Artyom Karnov in Kotlin Community
По идее можно же скомпилировать то же самое, зная только референс на метод
источник

AM

Andrew Mikhaylov in Kotlin Community
Сергей Троян
выглядит как недоделка языка

основная фишка параметров по умолчанию, что их можно добавить потом, не ломая предыдущие вызовы

а тут получается нельзя
Стоит помнить, что с точки зрения ABI добавление дефолтныэ параметров -- ломающее изменение.
источник

AL

Alexander Levin in Kotlin Community
Artyom Karnov
Ребят, а чем вызвано ограничение, что я не могу использовать метод референс в лямбде если у метода есть значение по умолчанию?

Например:
class Exmpl {
   fun m(s: String, i: Int = 0): String {
       return s+i
   }


   fun process(list: List<String>): List<String> {
       return list.map(this::m) //<--no way
   }
}
C тем, что это скоро будет починено :)
Issue - https://youtrack.jetbrains.com/issue/KT-8834
Работающий пример - https://pl.kotl.in/k6gFQKGAx
источник

AK

Artyom Karnov in Kotlin Community
О, чётенько. Спасибо, недогуглил
источник

СТ

Сергей Троян... in Kotlin Community
Alexander Levin
C тем, что это скоро будет починено :)
Issue - https://youtrack.jetbrains.com/issue/KT-8834
Работающий пример - https://pl.kotl.in/k6gFQKGAx
класс :)
источник
2020 July 31

I

Igor in Kotlin Community
Ребят, использую Kotlin DSL добавляю                                                                                             buildConfigField("String", "LOGIN", "login"),                                                                но падает с ошибкой, транслируется в                                                                     public static final String LOGIN = login;                                                                      то есть должно быть так "login" теряются кавычки
источник

AN

Alexander Nozik in Kotlin Community
Igor
Ребят, использую Kotlin DSL добавляю                                                                                             buildConfigField("String", "LOGIN", "login"),                                                                но падает с ошибкой, транслируется в                                                                     public static final String LOGIN = login;                                                                      то есть должно быть так "login" теряются кавычки
Надо пояснить что это и откуда, иначе не понятно. Если это gradle, но не понятно при чем тут java
источник