Zaměstnavatelé a programovací jazyky

n

Re:Zaměstnavatelé a programovací jazyky
« Odpověď #150 kdy: 01. 03. 2018, 12:27:30 »
Sakra, pozde, trochu jsem se opakoval. Sry, @Jano7 nicemene vidis sam z ruznych zdroju, ze se to da napsat i jinak.

Jo to kdyby Kotlin rozsiril pouziti generik, coz by znamenalo, ze by nejspis bylo potreba poladit trochu type erasure - z druhe strany si nemusi tahnout kouli na noze... tak to by bylo jiny.


Jano7

Re:Zaměstnavatelé a programovací jazyky
« Odpověď #151 kdy: 01. 03. 2018, 12:33:42 »
To v žiadnom prípade nebolo zhrnutie, len maličká ukážka. Tých zlepšení sú stovky, možno tisíce. Aj keby šlo len o syntactic sugar, tak zefektívnenie je obrovské.

Citace
A hned to vypada lip, co? A ten prevod na List delam jenom proto, aby sla pozit lambda, jinak se da samozrejme pracovat primo se String[]

Mne to nikdy lepšie nepripadalo, vždy mi to klalo oči.
Berme, že potrebujeme mať zoznam, teda dynamicky meniť jeho veľkosť. Nikdy ti neprišlo divné použiť Arrays triedu na tvorbu zoznamu? To už radšej použijem Guavu. To keď vidí trebárs Python, Ruby programátor, tak sa musí udivene pýtať: ty na tvorbu zoznamu vytvoríš (úplne inú kolekciu) pole a potom zavoláš statickú metódu Arrays, aby si to previedol na zoznam?

Kód: [Vybrat]
nums = [1, 2, 3, 4, 5]

Tak sa to robí v Ruby/Pythone ...

Citace
Druhy priklad, nevim co je tak spatneho na staticke metode, proste budu mit tridu Functions a v ni sadu statickych metod pouzivanych jako funkce.

Je omnoho elegantnejšie mať možnosť definovať funckcie, ako používať statické metódy. Niet divu, že Java sa neujala medzi matematikmi.

Citace
...vlozim do Eclipse..

Nemyslíš vážne. :o Používaš Eclipse?

Kód: [Vybrat]
package com.zetcode

class Car(var name: String, var price: Int) {

    override fun toString(): String {
        return "Car(name='$name', price=$price)"
    }
}

fun main(args: Array<String>) {

    val cars = listOf(Car("Mercedes", 23400), Car("Toyota", 28900))

    cars.forEach { car -> println(cars) }
}

Ďalšie elegancia, ďalšie skrátenie kódu. Ak nepoužijeme class bez modifikátora, máme automaticky public. Výrazná úspora pri gettroch a settroch. Ďalšia zjednodušenie toString metódy. Netreba použiť new pri tvorbe objektu.

Kód: [Vybrat]
package com.zetcode

fun main(args: Array<String>) {

    println(alphabet());
}

fun alphabet() = StringBuilder().apply {

    for (letter in 'a'..'z') {
        append("$letter ")
    }
}.toString()

Funkcia apply umožní takto čarovať. Máme range operátor. Ďalej zabudovaný string interpolation nám umožní práve v takýchto maličkostiach zjednodušiť kód: potrebujem medzeru medzi písmanami. Príklad sa ešte ďalej dá zjednodušiť pomocou zabudovanej buildString standardnej Kotlin funkcie.



Jano7

Re:Zaměstnavatelé a programovací jazyky
« Odpověď #152 kdy: 01. 03. 2018, 12:51:43 »

Hele, ja nejsem Java guru, ani ji moc zrovna v lasce nemam, ale tohle nejsou dobre priklady:

Kód: [Vybrat]
Arrays.asList("pen", "pencil", "dog").forEach(System.out::println);

Ako som už spomínal vyššie, toto neberiem. Vytvárať zoznam pomocou poľa nie je kóšer.

Ale akurát mi napadlo, že od Javy 9 sa to dá spraviť elegantnejšie:

Kód: [Vybrat]
package com.zetcode;

import java.util.List;

public class JavaEx {

    public static void main(String[] args) {

         List<String> words = List.of("pen", "pencil", "dog");

         // od JDK 10
         //var  words = List.of("pen", "pencil", "dog");

         words.forEach(word -> System.out.println(word));
    }
}

OK, takže oproti Jave 9 má Kotlin v tomto prípade len menšie zlepšenia, ale má.

Kód: [Vybrat]
BinaryOperator<Integer> max = (x, y) -> x > y ? x : y;
System.out.println(max.apply(4, 5));

OK, aj to je možnosť. Kotlin verzia je však kratšia a podľa mňa elegantnejšia.

iii

Re:Zaměstnavatelé a programovací jazyky
« Odpověď #153 kdy: 01. 03. 2018, 12:59:29 »
Kód: [Vybrat]
Stream.of("pen", "pencil", "dog").forEach(System.out::println)

v

Re:Zaměstnavatelé a programovací jazyky
« Odpověď #154 kdy: 01. 03. 2018, 13:01:53 »
takhle se mi zatím prezentované jazyky jeví strašně ukecané a neelegantní


Jano7

Re:Zaměstnavatelé a programovací jazyky
« Odpověď #155 kdy: 01. 03. 2018, 13:06:18 »
Kód: [Vybrat]
Stream.of("pen", "pencil", "dog").forEach(System.out::println)

Tu nešlo o výpis troch stringov na konzolu, ale o chýbajúci literálový, alebo podobný skrátený zápis inicializácie menšieho zoznamu.
Niečo na štýl Pythonovho

Kód: [Vybrat]
words = ["pen", "pencil", "dog"]

Vyriešila to až Java 9 s týmto:

Kód: [Vybrat]
List<String> words = List.of("pen", "pencil", "dog");



n

Re:Zaměstnavatelé a programovací jazyky
« Odpověď #156 kdy: 01. 03. 2018, 13:11:19 »

Hele, ja nejsem Java guru, ani ji moc zrovna v lasce nemam, ale tohle nejsou dobre priklady:

Kód: [Vybrat]
Arrays.asList("pen", "pencil", "dog").forEach(System.out::println);

Ako som už spomínal vyššie, toto neberiem. Vytvárať zoznam pomocou poľa nie je kóšer.
Co si myslis, ze je na pozadi toho ArrayListu, nebo listu, ktery vytvaris? Tvuj argument je zcela lichy. Nedelas nic jineho, nez cos psal ty. Jenomze to napises jinym zpusobem.



Kód: [Vybrat]
BinaryOperator<Integer> max = (x, y) -> x > y ? x : y;
System.out.println(max.apply(4, 5));

OK, aj to je možnosť. Kotlin verzia je však kratšia a podľa mňa elegantnejšia.

Jak kratsia? Jako myslis to, ze pisu System.out.prinln misto println? Nebo to ze pisu max.apply(...) misto max(...) ? Mas tam navic else, takze to je nastejno. :) Ano uznavam, ze tohle je v jave divny a vubec ty lambdy jsou takove divne oproti c++, ale na Java svet to funguje dobre.

iii

Re:Zaměstnavatelé a programovací jazyky
« Odpověď #157 kdy: 01. 03. 2018, 13:12:10 »
Obvykle právě seznam k ničemu nepotřebuješ. Pro mě Kotlin také moc výhod nemá.

Ale jak píšeš, Java 9 má další vychytávky a dnes je 9 už standard, za dveřmi je 10 s dalším menším nášupem. Není důvod se domnívat, že cokoli nad JVM bude lepší než Java. Kompletně jiný jazyk a ekosystém ale možná ano.

Labrat

Re:Zaměstnavatelé a programovací jazyky
« Odpověď #158 kdy: 01. 03. 2018, 13:27:23 »
Kód: [Vybrat]
Stream.of("pen", "pencil", "dog").forEach(System.out::println)

Tu nešlo o výpis troch stringov na konzolu, ale o chýbajúci literálový, alebo podobný skrátený zápis inicializácie menšieho zoznamu.
Niečo na štýl Pythonovho

Kód: [Vybrat]
words = ["pen", "pencil", "dog"]

Vyriešila to až Java 9 s týmto:

Kód: [Vybrat]
List<String> words = List.of("pen", "pencil", "dog");
Funkcionální konstrukty v Javě vypadají blbě a ukecaně, ale stejně se moc nepoužívají, tak to je asi jedno. Když FP nad JVM, tak Scalu.

Youda

Re:Zaměstnavatelé a programovací jazyky
« Odpověď #159 kdy: 01. 03. 2018, 16:17:05 »
Ano, obvykle pouzivam Eclipse. Tedy presneji Spring Tool Suite.
A osobne Eclipse hatery nechapu, dnes se IDE pouziva jako editor a spoustec pro Maven a GIT client, je vicemene jedno co se pouzije.

Jinak co se tyce examplu s cenami aut tak:

Kód: [Vybrat]
package pkg;

public class Car {

private String name;
private int price;

/**
* @param name
* @param price
*/
public Car(String name, int price) {
super();
this.name = name;
this.price = price;
}

@Override
public String toString() {
return "Car [name=" + name + ", price=" + price + "]";
}

public String getName() {
return name;
}

public int getPrice() {
return price;
}

}

Z vyse uvedeneho datoveho beanu jsem napsal pouze ty dva radky s name a price. Zbytek vygeneroval Eclipse:
- Nejprve Create new Class
- Pak ty moje 2 radky s atributy
- Generate constructor using fields
- Generate getters and setters
- Generate toString()

Atributy jsou samozrejme private s gettery, to je zaklad slusneho code stylu, do getteru si muzu dat pripadne debug hook, nebo jej udelat synchronized, pokud bude potreba. Samozrejme by slo mit atributy public, nedoporucuju. Atribut bez pristupoveho modifikatoru je v Jave tzv. package-private - tedy maji k nemu pristup classy ze stejne package.
Boilerplate vubec nijak nevadi, kazdy vi k cemu slouzi datovy bean, vsechny sedi v bean specific package a jedine zajimave jsou ty dva radky s definici atributu.

Zavolani v kodu:

Kód: [Vybrat]
Arrays.asList(new Car("Mercedes", 23400), new Car("Toyota", 28900)).forEach(System.out::println);


kotlin ??

Re:Zaměstnavatelé a programovací jazyky
« Odpověď #160 kdy: 01. 03. 2018, 19:52:03 »
Přesně jak jsem čekal, škrtám kotlin ze seznamu jazyků na prohlédnutí.