https://kotlinlang.org logo
Title
l

lewik

11/26/2017, 11:25 AM
Как в коде js итерировать по котлиновской LinkedHashMap?
Можно посмотреть на вкладку результатов Generated javascript code
l

lewik

11/26/2017, 4:13 PM
Ага, уже соборазил, спасибо
kotlin.kotlin.collections.LinkedHashMap.prototype.forEach = function (callback) {
    const it = this.entries.iterator();
    while (it.hasNext()) {
        const entry = it.next();
        callback(entry.key_5xhq3d$_0, entry._value_0)
    }
};
i

ilya.gorbunov

11/26/2017, 4:16 PM
интересно откуда такой суффикс у key
l

lewik

11/26/2017, 4:16 PM
mangling же
Сам entry - это котлиновский класс какой то
Знать бы как это отключить... Я понимаю зачем он нужен, но когда нет никакогой необходимости - можно было бы отключить. Ну или хоть какой то механизм для этого общий предложить.
i

ilya.gorbunov

11/26/2017, 9:50 PM
у свойств и методов без параметров нет манглинга. Это видно по коду, сгенерированному для примера по ссылке.
s

snrostov

11/27/2017, 11:49 AM
интересно откуда такой суффикс у key
может быть это для того чтобы private поля не путались при наследовании?
org.jetbrains.kotlin.js.naming.NameSuggestion.Companion#getPrivateMangledName
да, точно
i

ilya.gorbunov

11/27/2017, 3:37 PM
Тогда в коде выше с суффиксами потенциальная проблема, если он обращается к приватным полям вместо публичных свойств
l

lewik

11/27/2017, 3:43 PM
Так или иначе надо что то придумывать с этим переименованием, потому что вызывать много котлина из js - сложно. А значит переводить большой проект с js на котлин - сложно. А мелкие проекты на котлине не интересны.
b

bashor

11/27/2017, 8:33 PM
@lewik если есть возможность, лучше пользоваться public API, а в Вашем случае такая возможность есть
prototype конечно лучше не трогать, но если очень надо …
утилитные функции имеет смысл писать на котлине и использовать
JsName
аннотацию для того чтобы получить более читаемое имя
l

lewik

11/28/2017, 6:50 AM
@bashor Map и List - не сложно. Главная проблема - у меня 20 data class на kotlin-common. Я не могу прописать JsName.
Судя по всему проще переписать весь js на kotlin %)