https://kotlinlang.org logo
Docs
Join the conversationJoin Slack
Channels
100daysofcode
100daysofkotlin
100daysofkotlin-2021
advent-of-code
aem
ai
alexa
algeria
algolialibraries
amsterdam
android
android-architecture
android-databinding
android-studio
androidgithubprojects
androidthings
androidx
androidx-xprocessing
anime
anko
announcements
apollo-kotlin
appintro
arabic
argentina
arkenv
arksemdevteam
armenia
arrow
arrow-contributors
arrow-meta
ass
atlanta
atm17
atrium
austin
australia
austria
awesome-kotlin
ballast
bangladesh
barcelona
bayarea
bazel
beepiz-libraries
belgium
berlin
big-data
books
boston
brazil
brikk
budapest
build
build-tools
bulgaria
bydgoszcz
cambodia
canada
carrat
carrat-dev
carrat-feed
chicago
chile
china
chucker
cincinnati-user-group
cli
clikt
cloudfoundry
cn
cobalt
code-coverage
codeforces
codemash-precompiler
codereview
codingame
codingconventions
coimbatore
collaborations
colombia
colorado
communities
competitive-programming
competitivecoding
compiler
compose
compose-android
compose-desktop
compose-hiring
compose-ios
compose-mp
compose-ui-showcase
compose-wear
compose-web
connect-audit-events
corda
cork
coroutines
couchbase
coursera
croatia
cryptography
cscenter-course-2016
cucumber-bdd
cyprus
czech
dagger
data2viz
databinding
datascience
dckotlin
debugging
decompose
decouple
denmark
deprecated
detekt
detekt-hint
dev-core
dfw
docs-revamped
dokka
domain-driven-design
doodle
dsl
dublin
dutch
eap
eclipse
ecuador
edinburgh
education
effective-kotlin
effectivekotlin
emacs
embedded-kotlin
estatik
event21-community-content
events
exposed
failgood
fb-internal-demo
feed
firebase
flow
fluid-libraries
forkhandles
forum
fosdem
fp-in-kotlin
framework-elide
freenode
french
fritz2
fuchsia
functional
funktionale
gamedev
ge-kotlin
general-advice
georgia
geospatial
german-lang
getting-started
github-workflows-kt
glance
godot-kotlin
google-io
gradle
graphic
graphkool
graphql
graphql-kotlin
graviton-browser
greece
grpc
gsoc
gui
hackathons
hacktoberfest
hamburg
hamkrest
helios
helsinki
hexagon
hibernate
hikari-cp
hire-me
hiring
hongkong
hoplite
http4k
hungary
hyderabad
image-processing
india
indonesia
inkremental
intellij
intellij-plugins
intellij-tricks
internships
introduce-yourself
io
ios
iran
israel
istanbulcoders
italian
jackson-kotlin
jadx
japanese
jasync-sql
java-to-kotlin-refactoring
javadevelopers
javafx
javalin
javascript
jdbi
jhipster-kotlin
jobsworldwide
jpa
jshdq
juul-libraries
jvm-ir-backend-feedback
jxadapter
k2-early-adopters
kaal
kafka
kakao
kalasim
kapt
karachi
karg
karlsruhe
kash_shell
kaskade
kbuild
kdbc
kgen-doc-tools
kgraphql
kinta
klaxon
klock
kloudformation
kmdc
kmm-español
kmongo
knbt
knote
koalaql
koans
kobalt
kobweb
kodein
kodex
kohesive
koin
koin-dev
komapper
kondor-json
kong
kontent
kontributors
korau
korean
korge
korim
korio
korlibs
korte
kotest
kotest-contributors
kotless
kotlick
kotlin-asia
kotlin-beam
kotlin-by-example
kotlin-csv
kotlin-data-storage
kotlin-foundation
kotlin-fuel
kotlin-in-action
kotlin-inject
kotlin-latam
kotlin-logging
kotlin-multiplatform-contest
kotlin-mumbai
kotlin-native
kotlin-pakistan
kotlin-plugin
kotlin-pune
kotlin-roadmap
kotlin-samples
kotlin-sap
kotlin-serbia
kotlin-spark
kotlin-szeged
kotlin-website
kotlinacademy
kotlinbot
kotlinconf
kotlindl
kotlinforbeginners
kotlingforbeginners
kotlinlondon
kotlinmad
kotlinprogrammers
kotlinsu
kotlintest
kotlintest-devs
kotlintlv
kotlinultimatechallenge
kotlinx-datetime
kotlinx-files
kotlinx-html
kotrix
kotson
kovenant
kprompt
kraph
krawler
kroto-plus
ksp
ktcc
ktfmt
ktlint
ktor
ktp
kubed
kug-leads
kug-torino
kvision
kweb
lambdaworld_cadiz
lanark
language-evolution
language-proposals
latvia
leakcanary
leedskotlinusergroup
lets-have-fun
libgdx
libkgd
library-development
linkeddata
lithuania
london
losangeles
lottie
love
lychee
macedonia
machinelearningbawas
madrid
malaysia
mathematics
meetkotlin
memes
meta
metro-detroit
mexico
miami
micronaut
minnesota
minutest
mirror
mockk
moko
moldova
monsterpuzzle
montreal
moonbean
morocco
motionlayout
mpapt
mu
multiplatform
mumbai
munich
mvikotlin
mvrx
myndocs-oauth2-server
naming
navigation-architecture-component
nepal
new-mexico
new-zealand
newname
nigeria
nodejs
norway
npm-publish
nyc
oceania
ohio-kotlin-users
oldenburg
oolong
opensource
orbit-mvi
osgi
otpisani
package-search
pakistan
panamá
pattern-matching
pbandk
pdx
peru
philippines
phoenix
pinoy
pocketgitclient
polish
popkorn
portugal
practical-functional-programming
proguard
prozis-android-backup
pyhsikal
python
python-contributors
quasar
random
re
react
reaktive
realm
realworldkotlin
reductor
reduks
redux
redux-kotlin
refactoring-to-kotlin
reflect
refreshversions
reports
result
rethink
revolver
rhein-main
rocksdb
romania
room
rpi-pico
rsocket
russian
russian_feed
russian-kotlinasfirst
rx
rxjava
san-diego
science
scotland
scrcast
scrimage
script
scripting
seattle
serialization
server
sg-user-group
singapore
skia-wasm-interop-temp
skrape-it
slovak
snake
sofl-user-group
southafrica
spacemacs
spain
spanish
speaking
spek
spin
splitties
spotify-mobius
spring
spring-security
squarelibraries
stackoverflow
stacks
stayhungrystayfoolish
stdlib
stlouis
strife-discord-lib
strikt
students
stuttgart
sudan
swagger-gradle-codegen
swarm
sweden
swing
swiss-user-group
switzerland
talking-kotlin
tallinn
tampa
teamcity
tegal
tempe
tensorflow
terminal
test
testing
testtestest
texas
tgbotapi
thailand
tornadofx
touchlab-tools
training
tricity-kotlin-user-group
trójmiasto
truth
tunisia
turkey
turkiye
twitter-feed
uae
udacityindia
uk
ukrainian
uniflow
unkonf
uruguay
utah
uuid
vancouver
vankotlin
vertx
videos
vienna
vietnam
vim
vkug
vuejs
web-mpp
webassembly
webrtc
wimix_sentry
wwdc
zircon
Powered by Linen
russian
  • m

    miha-x64

    10/04/2017, 5:47 PM
    какой бы она ни была – это не часть контракта и надеяться на неё нельзя
    Как же совместимость?
    некоторые вопят, что из-за этого java interop не 100% :)
    Интероп Котлина с Джавой — 100%, а вот Джавы с Котлином...
    o
    2 replies · 2 participants
  • l

    lewik

    10/04/2017, 6:32 PM
    А как... создать котлин модуль который и в jvm и в js может быть интегрирован?
    b
    i
    +2
    26 replies · 5 participants
  • c

    caffeine

    10/05/2017, 3:43 PM
    где нибуть можно раздобыть футболки с логотипом котлина? штуки 3-4
    a
    e
    5 replies · 3 participants
  • l

    lewik

    10/05/2017, 7:49 PM
    Все data class которые я использую с сериализацией мне приходится оформлять следующим макаром: val + дефолтное значение. Для того чтобы создался пустой констурктор. Это так и задумано изначально? Я не совсем понимаю идею data class
    m
    3 replies · 2 participants
  • e

    elizarov

    10/05/2017, 8:03 PM
    Скорее я бы сказал, что используемые вам serialization framworks очень Java-центричные и не понимают идею data class и почему вообще создавать классы а потом в них всё проставлять это плохо.
    ➕ 4
    l
    6 replies · 2 participants
  • l

    lewik

    10/05/2017, 8:46 PM
    Эм... а есть не извращенный способ вызвать copy у immutable объекта в ... java? Или таки придется все свойства перечислить? 🙂
    g
    1 reply · 2 participants
  • l

    lewik

    10/06/2017, 11:36 AM
    data class Data(val name: String = ""); Data().copy()
    Оно конечно хорошо, но надо копию не просто так, а с измененным параметром. И, судя по всему, кроме как полностью не указав все параметры и один измененный скопировать не получится. Ну ладно, это временно. Планирую все перевести на котлин, включая js. Надо сказать сложнее всего писать c immutable, я вот вообще не привык так писать.
    s
    q
    +1
    8 replies · 4 participants
  • e

    elizarov

    10/06/2017, 6:10 PM
    Тут как в том анекдоте…. Или крестик снять, или штаны надеть. А если серъезно, то есть идея сделать полее полную поддержку immutability в языке (ну вот чтобы было
    val
    , но можно было бы менять так же удобно как будто там был
    var
    ), но это будет не скоро, так как это не просто.
  • e

    elizarov

    10/06/2017, 6:11 PM
    Да и к тому же, зачем вам вот прямо immutable объет? Ну заведите к нему read-only интерфейс (как в коллекциях). Это тоже, конечно, boilerplate, но существенно меньший чем builders. Этот boilerplate мы может когда-нибудь поборим прямо в языке в рамках работы над immutablity
    s
    4 replies · 2 participants
  • e

    elizarov

    10/06/2017, 6:17 PM
    Идея, если кратко, в том, что тупо научить язык делать то же самое, что в stdlib ручками сделано для коллекций. Ведь преобразование
    MutableList
    ->
    List
    это весьма механическая опреация (надо просто вырезать мутирующие методы), поэтому можно переименовать
    MutableList
    в
    mutable List
    , где приставка
    mutable
    как раз и делает это вырезание. Ну и чтобы можно это было к любым классам интерфейсам применять до кучи. Ну это идея в целом. Там много всяких подводных граблей вылезает, которые надо аккуратно обойти
    ➕ 1
    i
    5 replies · 2 participants
  • i

    irus

    10/09/2017, 1:51 PM
    Но вообще отличный пример @beholder , в паззлеры однозначно! @Dmitry Kandalov
    👍 1
    d
    2 replies · 2 participants
  • l

    lewik

    10/11/2017, 3:14 PM
    В 1.2 `Error:(49, 0) Platform project project ':A' implements non-common project root project 'B' (
    apply plugin 'kotlin-platform-kotlin'
    )` Проект А является подпроектом B, проект А это
    platform-jvm
    . Я не совсем понимаю, что оно хочет? B дейтсвительно не common, но что в этом такого?
    b
    i
    +1
    29 replies · 4 participants
  • e

    elizarov

    10/12/2017, 1:59 PM
    @rrader Пока есть ощущение что не надо этого делать. Более конкретно, есть ощущение что для любой проблемы, которую можно решить с помощью макросов, есть вменяемое решение, которое требует какой-то другой, более простой фишки в языке, но не макросов.
    r
    a
    10 replies · 3 participants
  • l

    lewik

    10/13/2017, 6:21 PM
    А как составить несколько раз вложенный объект? Чтобы без prototype генерировалось
    b
    4 replies · 2 participants
  • l

    lewik

    10/13/2017, 6:42 PM
    Не получается итерировать нативную Map из js в цикле for. Я ее помечаю как kotlin.collections.Map. Браузер ругается на то, что
    entries.iterator is not a function
    Втыкать итератор или есть готовое решение?
    i
    11 replies · 2 participants
  • l

    lewik

    10/15/2017, 8:56 AM
    А как для common класса прописать
    @JsName
    ? Наследовать в js-platform?
    b
    2 replies · 2 participants
  • m

    miha-x64

    10/18/2017, 9:59 AM
    даже если я зарегистрируюсь, этот баг уже не найду
    b
    2 replies · 2 participants
  • l

    lewik

    10/19/2017, 8:32 PM
    После обновления котлин плагина на следующую бету при запуске spring boot проект перестал видеть application.properties. Классы Application и конфигурации на котлине. Кто то сталкивался? Или это вообще не к kotlin плагину?
    b
    l
    3 replies · 3 participants
  • d

    dev-priporov

    10/20/2017, 12:17 PM
    идея что-то непонятное у меня исполняет тоже, как-будто закешировала запуск апликухи, и теперь чтобы я не менял - эффекта ноль, если сборка прошла успешно, то он запускает её со старыми аргументами, кэш чистил, клин делал
    l
    1 reply · 2 participants
  • l

    lewik

    10/20/2017, 4:25 PM
    Запускаю цикл for in в котором вещи типа
    print 1
    print 2
    А в консоль получаю
    111222
    Это так консоль работает или у котлина особые циклы?
    b
    1 reply · 2 participants
  • s

    snrostov

    10/21/2017, 11:32 AM
    Нет ли какой либо аннотации, которая заставит IDE проверять чтобы выражение которое возвращает функция должно было быть использовано? Может быть очень полезно, для чистых функций. ``` @Pure fun pureFun(input: Int) = input * 123 fun main(args: Array<String>) { pureFun(123) // result of pure function is never used println(pureFun(123)) } `` Если нет, возможно ли что то подобное сделать при помощи плагина к компилятору?
  • s

    snrostov

    10/21/2017, 11:35 AM
    Issue в :youtrack: завести?
    i
    1 reply · 2 participants
  • q

    qwert_ukg

    10/23/2017, 3:53 AM
    Эх! даже в Боливии проходят митапы по котлину (https://www.facebook.com/photo.php?fbid=1866984396649340&amp;set=gm.1695751477133894&amp;type=3&amp;theater&amp;ifg=1) а в казахстане даже юзер групы нету 😞 (http://kotlinlang.org/community/user-groups.html) 😞
    a
    4 replies · 2 participants
  • v

    voddan

    10/30/2017, 12:45 PM
    Кто-нибудь в Питере может одолжить мне на пару дней "The Garbage Collection Handbook: The Art of Automatic Memory Management", Richard Jones?
    i
    2 replies · 2 participants
  • u

    umar

    11/01/2017, 11:29 AM
    После введения литералов массивов для аргументов аннотаций возникла идея более общего механизма для коллекций. Что, если определять тип коллекции из контекста, например, из типа проперти или типа параметра функции. А для возможности замены кастомного билдера коллекции литералом использовать аннотации вроде
    @CollectionBuilder
    и
    @KeyValueCollectionBuilder
    . Можно проаннотировать существующие в стандартной библиотеке билдеры вроде arrayOf,р listOf, mapOf, etc. Примеры :
    fun <T> List<T>.contains(elements: List<T>) = containsAll(elements)
    
    val list = listOf(1, 2, 3)
    list.contains([1, 2])
    [2, 3] in list
    
    class Person {
      lateinit var friends: List<Person>
      lateinit var grades: Map<String, Int>
    }
    
    val alice = Person()
    alice.friends = [bob, charlie]
    alice.grades = [
      "math" : 92,
      "history" : 89,
      "lang" : 97
    ]
    s
    3 replies · 2 participants
  • m

    miha-x64

    11/01/2017, 12:36 PM
    Сегодня опять встретил человека, который ставит модификатор
    data
    на классы, не зная, что он приносит. Хочется чего-то ещё более понятного и явного в доку написать, чтоб люди не лепили его куда попало...
    r
    v
    5 replies · 3 participants
  • b

    beholder

    11/02/2017, 8:36 AM
    И всё ради чего? Сэкономть шесть букв на
    listOf
    и чтобы было как в любимом груви или питончике?
    ➕ 6
    v
    g
    7 replies · 3 participants
  • s

    snrostov

    11/03/2017, 8:24 AM
    Есть несколько вопросов (вернее опросов) про dsl для ui (react, anko, tornadofx и т.д.). Задаю их т.к. прямо сейчас нужно начинать большой проект с кучей ui кода, и при использовании подхода dsl в указанных выше либах есть сложности. Есть штука с альтернативным подходом, но хочется понять насколько он лучше (и есть ли аналогичные проблемы у дргуих). 1. Всех ли устраивает добавление элементов в родительский компонент через неявный вызов функций-билдеров? вариант 1:
    verticalLayout {
            view {
    как мне кажется было бы удобнее если бы эти методы назывались addVerticalLayout, или что то вроде: вариант 2:
    +VerticalLayout {
            +View {
    В варинате 2, имхо, проще читать код, т.к. функции билдеров визуально сложно отличить от простых функций с лямбдой (forEach, map и да и if в конце концов). В простом коде это не заментно, но когда начинается смесь из билдеров и функций лямбд, очень лего запутаться. Кроме того добавление текста в kotlinx.html уже выглядит также как тут
    +"text"
    1️⃣ 6
    2️⃣ 2
    b
    30 replies · 2 participants
  • s

    snrostov

    11/03/2017, 10:09 AM
    Вопрос спорный. Как мне кажется, основной выигрыш DSL в том что сразу получаем мощную поддержку IDE, с кучей рефакторингов и прочим
    ➕ 2
    i
    31 replies · 2 participants
  • i

    irus

    11/03/2017, 12:31 PM
    val tree = root(
        div(classes = "main", render = h(
            users()
        )),
        users(),
        p("Test")
    )
    
    fun users() = ex {
        users.map {
            p(it.name)
        }
    }
    
    fun list() = e {
        ul(render = h(
            li("First"),
            li("Second")
        ))
    }
    s
    53 replies · 2 participants
Powered by Linen
Title
i

irus

11/03/2017, 12:31 PM
val tree = root(
    div(classes = "main", render = h(
        users()
    )),
    users(),
    p("Test")
)

fun users() = ex {
    users.map {
        p(it.name)
    }
}

fun list() = e {
    ul(render = h(
        li("First"),
        li("Second")
    ))
}
s

snrostov

11/03/2017, 12:44 PM
Это чем то отличается от
Section(
      key = "s1",
      title = "About",
      children = listOf(
        Text("About contents")
      )
    )
?
i

irus

11/03/2017, 12:45 PM
В конечном итоге - нет
Какие проблемы с этим подходом?
s

snrostov

11/03/2017, 12:46 PM
все if, for и прочую логику нужно заменять на map, filter и т.д. Т.е. исключительно функциональный подход
можно добавить лямбду elements { yeild(element) }
но это как раз тоже самое что +
в роли плюса выступает yeild
i

irus

11/03/2017, 12:48 PM
val tree = root(
    div(classes = "main", render = h(
        e {
            if (condition) {
                users()
            } else {
                list()
            }
        }
    )),
    users(),
    p("Test")
)
s

snrostov

11/03/2017, 12:48 PM
только один элемент можно вернуть?
i

irus

11/03/2017, 12:48 PM
e - один елемент ex - лист
s

snrostov

11/03/2017, 12:48 PM
а если нужно в цикле что то понадобовлять и отфильтровать?
в случае ex - все равно функциональный подход?
например как написать вот это: for (user in users) { if (user.visible) { +user } }
i

irus

11/03/2017, 12:51 PM
ну конкретно этот пример прям просится функционально написать
s

snrostov

11/03/2017, 12:52 PM
да, все можно переписать в функциональный вид, но не все привыкли так писать. все привыкли писать процедурно
но вобще идея двух режимов интересная
можно сделать оба вида dsl, с функциональным подходом, и с некой функцией elements {} внутри которой использовать yeild (+)
i

irus

11/03/2017, 12:53 PM
val tree = root(
    div(classes = "main", render = h(
        ex {
            val render = mutableListOf<VDom>()

            for (user in users) {
                if (user.visible) {
                    render += p(user.name)
                }
            }

            render.toList()
        }
    )),
    users(),
    p("Test")
)
если хочется циклы, но абсолютно бесполезно
да, поверх этого можно прикрутить такой DSL с (+)
s

snrostov

11/03/2017, 12:55 PM
твое предолжение - это flutter. я пробовал так писать, очень сложно переключится с процедурного на функциональный
все таки все привыкли к процедурному подходу
i

irus

11/03/2017, 12:56 PM
я привык к JSX - там как раз таки в основном функциональный подход
s

snrostov

11/03/2017, 12:56 PM
но, с другой стороны функциональный подход открывает новые горизонты по реактивному рендеру
например если изменился один элемент списка, то будет рендерится только он. в процедурном такое не получить
я привык к JSX - там как раз таки в основном функциональный подход
а вот и нет 🙂 все примеры на сайте реакта как раз и продауют его как процедурный
а, нет вру
еще одна проблема с заданием дочерних элементов в виде списка - его, как ни крути, сложнее читать
i

irus

11/03/2017, 1:02 PM
const CandidatesViewComponent = ({candidates}: StateProps) => {
  return (
    <div className="container">
      <div className="row">
        {candidates.map((candidate: OsCandidateWithPerson) =>
          <div className="col-md-4"
               style={styles.candidate}
               key={candidate.id}>
            <Card>
              <CardHeader
                title={`${candidate.firstName} ${candidate.lastName}`}
                subtitle={`Status: ${candidate.status}`}
              />
              <CardText>
                Rating: {candidate.rating}
              </CardText>
              <CardActions>
                <Link to={`/candidates/${candidate.id}/view`}>
                  <FlatButton label="View Details"/>
                </Link>
              </CardActions>
            </Card>
          </div>
        )}
      </div>
    </div>
  );
};
s

snrostov

11/03/2017, 1:02 PM
из за того что скобки копятся очень быстро
i

irus

11/03/2017, 1:02 PM
вот типичный компонент на реакте
s

snrostov

11/03/2017, 1:02 PM
да, я ошибся про реакт. запутался
i

irus

11/03/2017, 1:03 PM
да, скобочки копятся. поэтому декомпозировать на функции
не пытаться описать все, как в примере выше
s

snrostov

11/03/2017, 1:14 PM
div(className = "container",
    children = [div(
        className = "row",
        children = candidates.map { condidate ->
            div(
                className = "col-md-4",
                children = [card(
                    children = [
                        cardHeader(
                            title = "${candidate.firstName} ${candidate.lastName}",
                            subtitle="Status: ${candidate.status}"
                        )
                        cardText(
                            children = ["Rating: ", candidate.rating]
                        )
                        cardActions(
                            children = link(
                                to = "/candidates/${candidate.id}/view",
                                children = [flatButton(label = "View Details")]
                            )
                        )
                    ]
                )
            )]
        )]
    )
очень сложно читать
и писать, наверное тоже...
div(className = "container") { div(className = "row") { candidates.forEach { condidate -> div(className="col-md-4") { card { cardHeader( title = "${candidate.firstName} ${candidate.lastName}", subtitle="Status: ${candidate.status}" ) cardText { +"Rating: " +candidate.rating } cardActions { link(to = "/candidates/${candidate.id}/view") { flatButton(label = "View Details") } } } } } } }
это то что в kotlinx.html
+Div(className = "container") { +Div(className = "row") { candidates.forEach { condidate -> +Div(className="col-md-4") { +Card { +CardHeader( title = "${candidate.firstName} ${candidate.lastName}", subtitle="Status: ${candidate.status}" ) +CardText { +"Rating: " +candidate.rating } +CardActions { +Link(to = "/candidates/${candidate.id}/view") { +FlatButton(label = "View Details") } } } } } } }
а это с плюсиками
кстате вот тут хорошо видно: в kotlinx.html forEach сложно разглядеть
не пытаться описать все, как в примере выше
ну вот проблема в том, что в kotlinx.html даже если все сразу описывать, все равно хорошо читается
было бы круто чтобы выглядело как в kotlinx.html но не требовалось бы объявлять билдеры дополнительно (и кучи кода для реакта)
i

irus

11/03/2017, 2:03 PM
А мне нравится:
fun candidatesViewComponent() = element {
    div(classes = "container", render = h(
        div(classes = "row", render = elements {
            candidates.map {
                div(classes = "col-md-4", style = "styles.candidate", render = h(
                    cardHeader(
                        title = "${it.firstName} ${it.lastName}",
                        subtitle = "Status: ${it.status}"
                    ),
                    cardText("Rating: ${it.rating}"),
                    cardActions(render = h(
                        link(to = "/candidates/${it.id}/view", render = h(
                            flatButton(label = "View Details")
                        ))
                    ))
                ))
            }
        })
    ))
}
Другое дело что в реальности все сложнее может стать
s

snrostov

11/03/2017, 2:33 PM
Идея так не умеет форматировать...
i

irus

11/03/2017, 2:37 PM
автореформат не сломал мне этот код
s

snrostov

11/03/2017, 2:39 PM
хм... мне он сделал такое:
fun candidatesViewComponent() = element {
  div(
      classes = "container", render = h(
      div(
          classes = "row", render = elements {
        candidates.map {
          div(
              classes = "col-md-4", style = "styles.candidate", render = h(
              cardHeader(
                  title = "${it.firstName} ${it.lastName}",
                  subtitle = "Status: ${it.status}"
              ),
              cardText("Rating: ${it.rating}"),
              cardActions(
                  render = h(
                      link(
                          to = "/candidates/${it.id}/view", render = h(
                          flatButton(label = "View Details")
                      )
                      )
                  )
              )
          )
          )
        }
      }
      )
  )
  )
}
i

irus

11/03/2017, 2:40 PM
Видимо у меня специальные настройки в code style
s

snrostov

11/03/2017, 2:40 PM
1.2 - rc
или у меня )
i

irus

11/03/2017, 2:47 PM
Ну я точно code style менял, чтобы отступы меньше были
View count: 4