About the Author

1068 Posts By svetylk0

  • Krásy Kotlinu: Vícero null-checků jedním šmahem

    Tato podpora (pokud vím) přímo v Kotlinu zatím není, ale nedávno mě napadlo, že bychom si mohli definovat takovouto funkci:

        fun notNull(vararg args: Any?, action: () -> Unit) {
            when {
                args.filterNotNull().size == args.size -> action()
            }
        }
    

    což nám tuto funkcionalitu umožní. Je to bezpečné však jen pro lokální proměnne/konstanty a pak ještě pro konstantní property třídy. Pokud je však řeč o proměnných propertách ve třídě, zde již žádný warning, že mohou být za běhu např. jiným vláknem změněny, nedostaneme. Nicméně výše definovaná funkce se dá použít např. takto:

        val a = 1
        val b = "something"
        var c: Float? = 2f
    
        notNull(a, b, c) {
            println("Almost safe!")
        }
    
        c = null
    
        notNull(a, b, c) {
            println("Doesn't print ...")
        }
    
  • Život je spotřební zboží.

  • Slušná navigace je ta, která ti vyká.

  • Není důležité to naprogramovat tak, aby to něco dělalo, ale hlavně ať to nedělá, co nemá. –Pavel Š.

  • Tak nebo tak, je tam bug. –Daniel B.

  • Na velikosti nezáleží … ale na hashi ano.

  • Landkiting na travních lyžích z pohledu dronu

    Celkově pojezdy nic moc, ale video naprostá špica 🙂 . Příjemné zakončení dovolené …

  • Chtěli mi nabídnout nějaký parfém. Ještě jsem žádný nepoužil, tak nevím … –Jakub K.

  • Zkrášlujeme legacy knihovny s Kotlinem

    V souvislosti s přepisem hry Sheeps Go Home do Kotlinu bych se chtěl podělit o to, jakým způsobem jsem si zkrášlil kód při práci s LibGDX tak, aby se to dalo používat trochu lidsky 🙂 . LibGDX je supr knihovna na vývoj (především) 2D her, ale co se jejích UI prvků týče, práce s nimi mi nepřišla úplně košér. Podívejme se např. na triviální klik na tlačítko. Původní kód v Javě vypadal např. takto:

            buttonLeaderboard.addListener(new ClickListener() {
                @Override
                public void clicked(InputEvent event, float x, float y) {
                    ((Game) Gdx.app.getApplicationListener()).setScreen(new LeaderboardScreen());
                }
            });
    

    Kde ClickListener není interface, ale třída. Sice nechápu proč, ale kvůli toho nemůžu použít ani klasickou lambdu. Jak bych si osobně představoval (a teď přejděme do Kotlinu), že by měl tento kód vypadat? Jako docela lidský způsob volání mi přijde např. tento:

            buttonLeaderboard.onClick {
                //code goes here ...
            }
    

    Můžu něčeho takového docílit? Samozřejmě, že můžu, stačí si TextButtonu trošku rozšířit:

            fun TextButton.onClick(action: () -> Unit) = addListener(object : ClickListener() {
                override fun clicked(event: InputEvent?, x: Float, y: Float) {
                    action()
                }
            })
    

    A nyní pro každé textové tlačítko, u kterého budu chtít definovat akci po kliku, bude tento úkol jako procházka růžovým sadem 🙂 .

  • Kouzlo chatu: Morčí servis

    Chat mě provázel snad již od mého dětství přes dospívání až dodnes. Ještě dávno před tím, než vzniklo slovo „sociální sítě“, byl to opravdový fenomén, kultura sama o sobě („netiketa“ atd.) a nemůžu nepřiznat, že ono tajemné kouzlo chatu vnímám i teď. Občas navštívím docela pěkně zmodernizovaný chat.cz, a tento útržek rozmluvy mě vcelku pobavil:

    <Pretty_> tuu
    <PaNtHeR> Pretty_: Co troubíš? 😀
    <Pretty_> PaNtHeR: že morčata jsou obstarané
    <PaNtHeR> Pretty_: Kvíkají blahem? 😀