Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - BoneFlute

Stran: 1 ... 55 56 [57] 58 59 ... 133
841
Vývoj / Re:Ideálny programovací jazyk
« kdy: 16. 05. 2019, 22:18:45 »
Dědičnost bych nezavrhoval úplně, ale souhlasím že pro intuitivní implementaci vztahu "is-a" se moc nehodí. I když se tak často prezentuje.

Na vztahy jsem uvažoval v duchu Prologu. Ale zatím jsem nic nevymyslel :-)

842
Vývoj / Re:Ideálny programovací jazyk
« kdy: 16. 05. 2019, 22:12:37 »
Takže nakonec to přece jenom bude JavaScript? ;-) (Spread operátor na objektových literálech v ECMAScript 2018.)
JS není špatný v principu, ale v tom, že se tam doprasilo co mohlo. Lua je "JS done right", nezaznamenal jsem, že by s ní kdokoli měl problém. Ne že by to byl jazyk, ve kterém bych nějak zvlášť chtěl dělat, ale je to jazyk hodný respektu.

+1

843
Vývoj / Re:Ideálny programovací jazyk
« kdy: 16. 05. 2019, 22:11:38 »
Jestli ponechat dědičnost na úrovni rozhraní, nebo ani v tomto případě ne?
Co dobrého a netriviálního by podle tebe přineslo to mít? Já mám pocit, že dědičnost kdekoli dělá víc škody než užitku*.
To úplně tak promyšlený nemám. Jednou jsem si hrál s něčím takovým:
Article
ArticleIdentification <- Article
ArticleSlugIdentification <- ArticleIdentification
ArticleIdIdentification <- ArticleIdentification
ArticleFullIdentification <- ArticleIdentification
ArticlePreview <- Article, ArticleIdentification
ArticleDetail <- Article, ArticleIdentification
ArticleModify <- Article, ArticleIdentification, Command
ArticleCreate <- Article, Command

Smysl to dávalo, neměl jsem možnost to pořádně prozkoumat praxí. A dráždí mě tam ta evidentní ukecanost.

Mně by se spíš líbilo to nahradit pěkným, stručným skládáním. Je dost škoda, když je v některých jazycích potřeba celé API vloženého objektu znovu zopakovat na tom vnějším (mám matný pocit, že to tak má někde Rust, ale přesně si to teď nevybavím).

Ano. Psal jsem o traitech a mixinech. To považuji za vhodného kadidáta.

844
Vývoj / Re:Ideálny programovací jazyk
« kdy: 16. 05. 2019, 21:34:49 »
K tématu:

Uvažoval jsem, že některé vlastnosti OOP se moc neosvědčili. Dědičnost a abstraktní třídy, vzor template method. Místo toho mixiny, nebo traity. Tedy znovupoužitelné fragmenty kódu, bez zanášení typu. Jestli ponechat dědičnost na úrovni rozhraní, nebo ani v tomto případě ne?

845
Vývoj / Re:Ideálny programovací jazyk
« kdy: 16. 05. 2019, 21:25:26 »
Tuhle variantu už jste vy naimplementoval pro oba jazyky, a – světe div se – je to jak jsem psal, vychází to v obou jazycích stejně. Dovolte, abych z vašeho kódu ty dva řádky vypíchl:
No, nevychází, že  ;D


Kód: [Vybrat]
System.out.println(a.equals(b)); // true
print (a == b) # True – používá se zde přetížený operátor ==
Přesně tak. Čitelnější to být nemůže.

Java, int: ekvivalence, použije se ==. Porovnání identity, zde popravdě netuším.
Java, objekt: ekvivalence, použije se operátor/metoda equals(). Porovnání identity, použije se operátor ==
Python, int: ekvivalence, použije se operátor ==. Porovnání identity, použije se operátor is.
Python, objekt: ekvivalence, použije se operátor ==, který se interně převede na __eq__. Porovnání identity, použije se operátor is.

A takhle, jak je to v Pythonu to mám rád.

Popravdě, zase si moc nefanděte. Já to píšu jen tak jako cvičení. Opravdu si nedělám naděje vám cokoliv vysvětlit  ;D

846
Vývoj / Re:Ideálny programovací jazyk
« kdy: 16. 05. 2019, 20:13:21 »
Každopádně ale musím uznat, že je to řachanda.

Kód: [Vybrat]
$ cat Main.java
public class Main {
    public static void main(String[] args) {
        Integer a = 1024;
        Integer b = 1024;
        System.out.println(a == b);
        System.out.println(a == 1024);
    }
}

$ javac Main.java

$ java -cp . Main
false
true

Doporučují čtyři ze tří psychoterapeutů.

První problém: Nechceme použít přetěžování operátorů. Díky tomu nemůžeme chápat equals jako ==. To by problém řešilo.
Problém druhý: Je škoda nevyužít operátor ==, když už ho nemůžeme na objektech použít pro ekvivalenci. Tak ho použijeme na porovnání identity.

A je to :-) Myslím, že tak nějak to bylo.

847
Vývoj / Re:Ideálny programovací jazyk
« kdy: 16. 05. 2019, 19:45:15 »
Zase špatně: Výsledek není stejný. Python se nechová jako Java. https://gist.github.com/BoneFlute/6c9f56a6b4c164b2fc2f246662daa7a8
Je fajn, že jste si to sám vyzkoušel, a zjistil jste, že je to přesně tak, jak jsem napsal. Akorát pak svůj komentář nezačínejte „zase špatně“, vypadá to, jako když jsem to napsal špatně já. Málokdo pochopí, jak jste to doopravdy myslel – že jste se zase mýlil vy.

Hezkej pokus. Ale uvědomujete si, že si to každý nyní může prohlídnout a bude jim to jasné?  8)

848
Vývoj / Re:Ideálny programovací jazyk
« kdy: 16. 05. 2019, 19:30:44 »
Bazírovat na tom můžete, smutné je, že nemáte pravdu.

Kód: [Vybrat]
class Integer:
    def __init__(self, value):
        self.value = value

a = Integer(1024)
b = Integer(1024)
print(a == b) #False
Co jsem udělal? Vzal jsem ten původní kód, který rozpoutal celou debatu. Kód, který se údajně v Javě chová úplně nemožně. Napsal jsem to samé v Pythonu, který se prý chová úplně jinak. A výsledek je co? Výsledek je naprosto stejný.

Python se chová přesně tak, jako se chová Java, dělá přesně to, co kritizujete.

Jistě budete argumentovat tím, že v Pythonu to můžete dál vylepšovat. Můžete do třídy dopsat přetížení operátoru:
Kód: [Vybrat]
def __eq__(self, other):
    return self.value == other.value
Ano, můžete. V Javě to také můžete dál upravovat, můžete přetížit metodu equals() (resp. ve třídě java.lang.Integer už ta metoda dávno přetížená je).

Zase špatně: Výsledek není stejný. Python se nechová jako Java. https://gist.github.com/BoneFlute/6c9f56a6b4c164b2fc2f246662daa7a8

849
Vývoj / Re:Ideálny programovací jazyk
« kdy: 16. 05. 2019, 16:23:48 »
Mimochodem, představte si, že v tom vašem příkladu a bude float a b bude double.
Predstavoval jsem si to tak silne, az se mi to zhmotnilo: https://play.golang.org/p/Jw9NlBT_VC_1

+1

850
Vývoj / Re:Ideálny programovací jazyk
« kdy: 16. 05. 2019, 16:22:33 »
V případě Javy je to pochybení, ale tak je to historie, nemusíme je v tom máchat.
Jedinej, kdo se tady v tom macha, je Filip. Urcite to neni jediny zdejsi javista. Kdyby neobhajoval neobhajitelne pruhlednymi demagogiemi a rekl "jasny hosi, tohle muze nekoho zmast, ale jinak je ta Java stejne docela fajn, ne?", nerekl by nikdo ani popel.

Já vím  8)

851
Vývoj / Re:Ideálny programovací jazyk
« kdy: 16. 05. 2019, 16:09:05 »
Třeba ty zmíněné atomy v Erlangu jsou taky vnitřně uložené jako integery (takže obdoba ukazatelů), ale je jasně zadefinované, že když vytvářím atom třeba ze stringu, tak buďto v "cachi"/"poolu" už je, potom se ten integer zaručeně použije, nebo tam není, tak se vytvoří a pro příští volání se stejnou hodnotou bude platit první varianta.
Nebo jednou větou: podle mě by to singleton buď měl nebo neměl být z definice.

Já si soukromě myslím, že číslo by singleton být měla. A nejenom číslo.

Mám číslo nebo objekt. Obvykle s ním pracuju jako s hodnotou. (To, že neustálé kopírování je drahé je mi jasné. Ale to je technickej detail, a dá se to řešit.) Ale někdy chci někam poslat objekt (nebo číslo), a chci, aby mi ho dotyčný změnil. Takže tam pošlu referenci. Referenci na to číslo nebo objekt.

Ano, takto to u ideální jazyka chci.

Hezky to má Rust. Použitelně to má Python (== versus is). V případě Javy je to pochybení, ale tak je to historie, nemusíme je v tom máchat.

852
Vývoj / Re:Ideálny programovací jazyk
« kdy: 15. 05. 2019, 22:05:48 »
V javě sice neprogramuju, ale z mého pohledu není problém samotné chování "==" ale spíš kombinace s umožněním zápisu:
    Integer a = 1024;
Vlevo objekt, vpravo primitivní typ, já bych už křičel při syntaktické kontrole, že správně má být něco jako:
    Integer a;
    a.value = 1024;
nebo
    Integer a = {value:1024};
Pak to upozorní každého, že Integer není int.

Nebo kompilátoru vysvětlit, že pro konkrétní vestavěné objektové typy se == prostě automaticky používá na hodnoty a ne na reference. Protože nevím o žádném smysluplném důvodu porovnávat reference na dva objekty typu Integer.

To tě nezachrání:
Kód: [Vybrat]
Integer a = {value:1024};

// dlouhej kód
if (a == b) {
}

A v Javě je dlouhej kód úplně cokoliv :)

853
Vývoj / Re:Ideálny programovací jazyk
« kdy: 15. 05. 2019, 21:38:22 »
Připomínám předmět vlákna. Bavíme se o ideálním jazyce. Ne o nejhorších možných, na které si člověk může vzpomenout. C, C++, JavaScript jsou všechno možné, jen ne nematoucí.

On existuje jazyk, který je ve všem nematoucí?

To samozřejmě netuším. Ale domnívám se, že některé jazyky jsou na tom výrazně hůře, než jiné. (Nebo narážíš na ten dvojitej zápor? :-P)

Ne, dvojité zápory mi nevadí. :) Mohl bys to s těmi některými jazyky trochu rozvést? Opravdu mě to zajímá, protože třeba když jsem nad tím přemýšlel, tak v jisté chvíli jsou matoucí jazyky všechny... byť je pravda, že některé třeba ze začátku, jiné později... vyjma Prologu, ale ten dělali Francouzi...  ;D

Zmínil bych Haskell. Ten mi přijde těžkej, ale matoucí ne. Většinou jsem se dostal do situace, kdy jsem si říkal, že jsem prostě jen málo inteligentní. Ale, že by dělal něco nelogického, nebo matoucího, to ne.

Z opačné barikády bych zmínil jazyk Lua. Občas jsem tam narážel na to, že mi něco scházelo, nebo tak. Ale že bych měl potřebu mu něco vytýkat, to ne.

Z novějších jazyků nemůžu sloužit. Nemám je ještě tak pod kůží.

Pak je samozřejmě třeba definovat, co že to považujeme za matoucí, a jak moc. Zvyknout se dá na všechno :-)

854
Vývoj / Re:Ideálny programovací jazyk
« kdy: 15. 05. 2019, 20:55:28 »
Připomínám předmět vlákna. Bavíme se o ideálním jazyce. Ne o nejhorších možných, na které si člověk může vzpomenout. C, C++, JavaScript jsou všechno možné, jen ne nematoucí.
Už dlouho se tu řeší jedna odbočka. Bavíme se tu o Javě, C, C++, JavaScriptu, takže je snad každému jasné, že ideální programovací jazyk se tu opravdu neřeší.
Proto ti to připomínám.

Nemohu souhlasit. Stačí se na to dívat tak, že porovnáváte hodnotu versus identitu, a není problém.
Je to problém, protože u spousty struktur nedokážete určit ani co je to ta identita, o hodnotě ani nemluvě.
Tak určitě  ::)

855
Vývoj / Re:Ideálny programovací jazyk
« kdy: 15. 05. 2019, 20:53:15 »
Připomínám předmět vlákna. Bavíme se o ideálním jazyce. Ne o nejhorších možných, na které si člověk může vzpomenout. C, C++, JavaScript jsou všechno možné, jen ne nematoucí.

On existuje jazyk, který je ve všem nematoucí?

To samozřejmě netuším. Ale domnívám se, že některé jazyky jsou na tom výrazně hůře, než jiné. (Nebo narážíš na ten dvojitej zápor? :-P)

Stran: 1 ... 55 56 [57] 58 59 ... 133