C# .NET vs. Java?

Re:C# .NET vs. Java?
« Odpověď #195 kdy: 25. 02. 2015, 00:07:57 »
AFAIK to API v jave je delany s ohledem na to, ze tech stream operaci se da retezit vic za sebou a snadno se v tom da pouzit paralelismus pomoci vlozeni .parallel(), takze imho mi to pripada jako rozdil pouziti univerzalniho API a jednoucelove funkce


sadsa

Re:C# .NET vs. Java?
« Odpověď #196 kdy: 25. 02. 2015, 00:15:31 »
mikrom, diky za prispevok! zikofel ma pravdu tiez. dobre chlapi :)

trollfeeder

Re:C# .NET vs. Java?
« Odpověď #197 kdy: 25. 02. 2015, 00:33:09 »
Ziktofel: To jde s lehce upravenou C# verzi taky.

Kód: [Vybrat]
public Article GetFirstJavaArticle()
{
    return articles.AsParallel()
                   .Where(x => x.Tags.Contains("Java"))
                   .FirstOrDefault();
}

IEnumerable<T> je lazy list, funkce nad nim se daji komponovat jako ve funkcionalnich jazykach. Select je map, SelectMany je mapcat, Where je filter, je tam hromada foldu...

Radek Miček

Re:C# .NET vs. Java?
« Odpověď #198 kdy: 25. 02. 2015, 00:34:22 »
AFAIK to API v jave je delany s ohledem na to, ze tech stream operaci se da retezit vic za sebou a snadno se v tom da pouzit paralelismus pomoci vlozeni .parallel(), takze imho mi to pripada jako rozdil pouziti univerzalniho API a jednoucelove funkce

a umi ten LINQ v C# retezit operace, co se v jave provadeji nad streamy?

Ano, řetězení i paralelismus (pomocí AsParallel) jsou podporovány - viz např. https://msdn.microsoft.com/en-us/library/dd460719%28v=vs.110%29.aspx.

Na rozdíl od Javy umí C# navíc z výrazu udělat AST, s nímž se pak za běhu může pracovat. Například v dotazu

Kód: [Vybrat]
    var query =
        from order in context.SalesOrderDetails
        where order.OrderQty > orderQtyMin && order.OrderQty < orderQtyMax
        select new
        {
            SalesOrderID = order.SalesOrderID,
            OrderQty = order.OrderQty
        };

se funkci Where předá AST podmínky order.OrderQty > orderQtyMin && order.OrderQty < orderQtyMax, který se pak za běhu programu přeloží do SQL.

Krom toho obrovskou výhodou C# oproti Javě je podpora async + await pro psaní asynchronního kódu.

Re:C# .NET vs. Java?
« Odpověď #199 kdy: 25. 02. 2015, 00:40:24 »
K tomu úžasnýmu NETu:
http://myego.cz/item/microsoft-a-jeho-hazeni-klacku-pod-nohy-net-vyvojarum/category/ze-zivota/group/29
Já kdysi ze zvědavosti zkoušel VS, teď nevím jestli 2008 nebo 2010 a takový pomalý, rozežraný a někdy padající moloch aby jeden pohledal. Bez R# to neumí ani věci, které maji Javovská IDE v základu zadarmo (generování kódu, navigace atd.). Děkuji, nechci.


JurP

Re:C# .NET vs. Java?
« Odpověď #200 kdy: 25. 02. 2015, 06:49:47 »
mikrom:
Neviem ci by zobrali cloveka, ktory ovlada javu, ked oni maju poziciu na c# s 2 rocnymi skusenostami.

Eda Beda:
Rozpravas o VS ako keby padal ako jablka zo stromu. Urcite mi padol menej krat ako netbeans, ktory som musel castokrat odpalovat ukoncim procesu.

Kolemjdoucí

Re:C# .NET vs. Java?
« Odpověď #201 kdy: 25. 02. 2015, 07:00:19 »
Krom toho obrovskou výhodou C# oproti Javě je podpora
async + await pro psaní asynchronního kódu.

Od Javy 5 existuje spousta luxusní podpory pro psaní asynchronního kódu, například http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/FutureTask.html je přesně to citované async + await, navíc je v Javě podpora i pro spouštění v jiných threadech (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Executors.html) nebo třeba speciální implementace pro asynchronní zpracování které nebude ve Swingu blokovat UI: http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html - prostě tvrdit že Java má špatnou podporu pro psaní asynchronního kódu jednoznačně není pravda. Ano, C# má pár detailů které jsou příjemnější než Java, ale podpora asynchronního kódu to není. A hlavně žádná z těch věcí kde je C# lepší než Java mi nevyváží jednu zásadní výhodu Javy: spolehlivě běhá i na serverech bez Windows! I když pokud by zadání bylo dělat UI na Windows (těžkého klienta) tak to je jednoznačně práce pro C# (pokud tedy nepřijdete na to že UI postavené na webovém prohlížeči se serverem běžícím na Linuxu s Javou je lepší).

Re:C# .NET vs. Java?
« Odpověď #202 kdy: 25. 02. 2015, 07:11:51 »
Java nedosahnete takovy siroky zaber technologii jako se C#. Napr pomoci C# muzete programovat serverove casti (pomoci Mono i na linuxu), desktop (WinForms a excelentni WPF), web (ASP.NET a novy vNext, ktery je multiplatformni, typescript, hodne podobny C#, atd...), cloud Azure, mobilni aplikace (WP, android a IOS pomoci Xamarin) a dalsi.
Máte naprostou pravdu, jak to, že si toho do dnes nikdo nevšiml? V Javě nikdy nikdo nenaprogramoval žádnou serverovou aplikaci, žádnou desktopovou, žádný web, nic pro cloud, žádnou mobilní aplikaci. Ono vlastně v Javě nebylo naprogramováno nikdy nic. A teprve teď jste to vy odhalil.

Re:C# .NET vs. Java?
« Odpověď #203 kdy: 25. 02. 2015, 07:30:14 »
A nazorny priklad:

Uplna novinka v Jave 8 (rok 2014):

public Optional<Article> getFirstJavaArticle() { 
    return articles.stream()
        .filter(article -> article.getTags().contains("Java"))
        .findFirst();
    }


A naproti tomu, LINQ v C#, ktery je s nama od roku 2007:

public Article GetFirstJavaArticle()
{
    return articles.FirstOrDefault(x => x.Tags.Contains("Java");
}

Co vam pripada prehlednejsi, citelnejsi a jednodussi na nauceni??

Hlavní na první pohled každý ten kód dělá něco jiného. Ten Javovský vezme všechny články, z nich vybere ty, které mají štítek Java, a z nich vybere první. Ten C# kód vezme články, z nich vezme první nebo výchozí, a u něj asi zkontroluje, zda obsahuje štítek Java. Alespoň to tak vypadá.

Jednodušší na naučení je podle mne to, kde se nic učit nemusím, protože správný význam je patrný i bez učení. Uniká my smysl toho, proč bych se měl učit, že FirstOrDefault může mít jako parametr predikát, který nejprve filtruje množinu a pak až vrací první záznam (proč nedělá třeba to, co jsem popsal výše, tedy že by rozhodl, zda první záznam odpovídá predikátu?), a proč bych se měl učit, že kód musím číst střídavě zleva doprava a zprava doleva.

peterTT

Re:C# .NET vs. Java?
« Odpověď #204 kdy: 25. 02. 2015, 07:51:30 »
Uniká my smysl toho, proč bych se měl učit, že FirstOrDefault může mít jako parametr predikát, který nejprve filtruje množinu a pak až vrací první záznam (proč nedělá třeba to, co jsem popsal výše, tedy že by rozhodl, zda první záznam odpovídá predikátu?), a proč bych se měl učit, že kód musím číst střídavě zleva doprava a zprava doleva.

a co tak si pozriet ako naozaj FirstOrDefault funguje az potom nieco komentovat?

Kód: [Vybrat]
public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
    if (source == null)
    {
        throw Error.ArgumentNull("source");
    }
    if (predicate == null)
    {
        throw Error.ArgumentNull("predicate");
    }
    foreach (TSource local in source)
    {
        if (predicate(local))
        {
            return local;
        }
    }
    return default(TSource);
}

prechadza mnozinu a vrati prvy najdeny. Vobec nefiltruje komplet mnozinu. A dalsia vec, aky by to malo zmysel, keby to porovnava len prvy prvok mnoziny?

Lafi

Re:C# .NET vs. Java?
« Odpověď #205 kdy: 25. 02. 2015, 08:02:24 »
A nazorny priklad:

Uplna novinka v Jave 8 (rok 2014):

public Optional<Article> getFirstJavaArticle() { 
    return articles.stream()
        .filter(article -> article.getTags().contains("Java"))
        .findFirst();
    }


A naproti tomu, LINQ v C#, ktery je s nama od roku 2007:

public Article GetFirstJavaArticle()
{
    return articles.FirstOrDefault(x => x.Tags.Contains("Java");
}

Co vam pripada prehlednejsi, citelnejsi a jednodussi na nauceni??

Hlavní na první pohled každý ten kód dělá něco jiného. Ten Javovský vezme všechny články, z nich vybere ty, které mají štítek Java, a z nich vybere první. Ten C# kód vezme články, z nich vezme první nebo výchozí, a u něj asi zkontroluje, zda obsahuje štítek Java. Alespoň to tak vypadá.

Jednodušší na naučení je podle mne to, kde se nic učit nemusím, protože správný význam je patrný i bez učení. Uniká my smysl toho, proč bych se měl učit, že FirstOrDefault může mít jako parametr predikát, který nejprve filtruje množinu a pak až vrací první záznam (proč nedělá třeba to, co jsem popsal výše, tedy že by rozhodl, zda první záznam odpovídá predikátu?), a proč bych se měl učit, že kód musím číst střídavě zleva doprava a zprava doleva.

v C# sa to da zapisat aj ako v jave:

Kód: [Vybrat]
articles
    .Where(a => a.Tags.Contains("java"))
    .First();

Ale zapis:

Kód: [Vybrat]
articles.First(a => a.Tags.Contains("java"));
mi pride prehladnejsi. rozdiel medzi First a FirstOrDefault je v tom ze First ked nenajde prvok tak vyhodi vynimku, FirstOrDefault vrati defaultnu hodnotu (null).

Lafi

Re:C# .NET vs. Java?
« Odpověď #206 kdy: 25. 02. 2015, 08:07:00 »
Uniká my smysl toho, proč bych se měl učit, že FirstOrDefault může mít jako parametr predikát, který nejprve filtruje množinu a pak až vrací první záznam (proč nedělá třeba to, co jsem popsal výše, tedy že by rozhodl, zda první záznam odpovídá predikátu?), a proč bych se měl učit, že kód musím číst střídavě zleva doprava a zprava doleva.

Nic sa ucit nemusite od toho tu mame predsa intelli sense.

Re:C# .NET vs. Java?
« Odpověď #207 kdy: 25. 02. 2015, 08:13:52 »
K tomu úžasnýmu NETu:
http://myego.cz/item/microsoft-a-jeho-hazeni-klacku-pod-nohy-net-vyvojarum/category/ze-zivota/group/29
Já kdysi ze zvědavosti zkoušel VS, teď nevím jestli 2008 nebo 2010 a takový pomalý, rozežraný a někdy padající moloch aby jeden pohledal. Bez R# to neumí ani věci, které maji Javovská IDE v základu zadarmo (generování kódu, navigace atd.). Děkuji, nechci.
Přidal bych další link
http://www.dotnetportal.cz/blogy/3/Tomas-Herceg/935/Visual-Studio-2010-vs-Visual-Studio-11-Beta

Radek Miček

Re:C# .NET vs. Java?
« Odpověď #208 kdy: 25. 02. 2015, 08:19:57 »
Krom toho obrovskou výhodou C# oproti Javě je podpora
async + await pro psaní asynchronního kódu.

Od Javy 5 existuje spousta luxusní podpory pro psaní asynchronního kódu, například http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/FutureTask.html je přesně to citované async + await

To je omyl, async + await není o nějaké třídě, ale o syntaxi. Jde o přehlednost zápisu.


Citace
navíc je v Javě podpora i pro spouštění v jiných threadech (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Executors.html) nebo třeba speciální implementace pro asynchronní zpracování které nebude ve Swingu blokovat UI: http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

Task, ThreadPool, BackgroundWorker.

Citace
prostě tvrdit že Java má špatnou podporu pro psaní asynchronního kódu jednoznačně není pravda. Ano, C# má pár detailů které jsou příjemnější než Java, ale podpora asynchronního kódu to není.

Většina mainstreamových jazyků má špatnou (např. monády) nebo žádnou podporu pro zápis asynchronního kódu.

Citace
A hlavně žádná z těch věcí kde je C# lepší než Java mi nevyváží jednu zásadní výhodu Javy: spolehlivě běhá i na serverech bez Windows!

V současné době je tu Mono a za chvíli tu bude CoreCLR.

Lafi

Re:C# .NET vs. Java?
« Odpověď #209 kdy: 25. 02. 2015, 08:26:40 »
Mam Visal Studio 2013 a este nikdy mi nespadlo. Visual studio 2010 o ktorom sa pise v uvedenom clanku ani 2012 mi tiez nikdy nespadlo. Aj VS ma par much, ale stabilita to rozhodne nie je. Zato kolega sa stazuje ze mu pada Eclipse. Co sa tyka R# ja som ho zatial nepotreboval ale chapem ze si treba propagovat vlastny produkt (neni JetBrains nahodou ceska firma)?