Správičky 2 799 Blogy 945 Fórum 18 550

Zaujímavosti zo sveta

13.05 Antispam report Exchange 2013/…
blogCZSK
Nedávno jsem se setkal s prosbou, zda je možno udělat report nad funkcionalitou antispamu Exchange a trošku jsem narazil na problém, jak dos…
13.05 Pozvánka: konference, workshop…
blogCZSK
Níže jsme pro vás připravili přehled akcí, které jsou pro vás připraveny v příštích několika týdnech. Coding Bootcamp 19. 5. 2016 – Praha V …
12.05 Pozvánka: Nástroje a služby pr…
blogCZSK
Od vývoje přes nasazení po správu napříč platformami Rádi byste optimalizovali vývoj svých aplikací na různé platformy a nevíte jak? Zajímá …
12.05 System Center Configuration Ma…
blogCZSK
V minulém díle jsme nainstalovali SQL Server, který je nutný pro běh Configuration Manageru. Dnes nás čeká instalace WSUS, což je produkt, j…
11.05 Hovory od křivého stolu (5)
blogCZSK
A máme tu další díl českého video seriálu Hovory od křivého stolu (5). Pro toto vydání HKS jsme se ponořili do hlubin naší budovy a natočili…
11.05 Pozvánka: Coding Bootcamp Meet…
blogCZSK
V rámci pražského Coding Bootcampu budete mít možnost se naučit vše, co potřebuje moderní webový vývojář. Abyste měli představu, co bude náp…
10.05 Zajímavé kurzy a videa–MVA a C…
blogCZSK
I tento měsíc vám přinášíme výběr nejzajímavějších videí, kurzů a záznamů konferencí. Veškeré kurzy pak naleznete na portálu MVA a výuková v…
10.05 Azure Site Recovery – VMWARE (…
blogCZSK
Připravil jsem pro vás sérii článků, zabývající se technologií Azure Site Recovery. Konkrétně v šesti na sebe navazujících článcích se dozví…
09.05 DataScript: akční nabídka škol…
blogCZSK
Připravili jsme pro vás nabídku školení On-Demand. A jaké jsou výhody? nižší cena učíte se z pohodlí svého domova nebo kanceláře přístup mát…
05.05 System Center Configuration Ma…
blogCZSK
V předchozím díle jsme si nainstalovali prerekvizity potřebné pro běh Primary Site Configuration Manageru a také jsme připravili doménu pro …
20.04 Odkazy z prohlížeče – 20.4.201…
atasoft
CodeProject Video Transcoding and Streaming on the fly – CodeProject – přímo v prohlížeči (?) A Sample Code Submitted for Senior C# …
11.04 Linq a pracovní pohovor
mstr
Zjišťovat znalosti Linqu u pracovního pohovoru může být obtížné - s Linqem se asi setkal každý C# programátor, ale vždy záleží, do jaké hlou…
08.04 Linq - k čemu použít Aggregate…
mstr
K jednomu z předchozích článků, ve kterém jsem dal k dispozici cheatsheet pro Linq, se mne jeden známý zeptal, k čemu že je dobrý Aggregate …
27.03 Bezpečnost – věc veřejná
Poslední březnový den se v Praze uskuteční jednodenní konference o počítačové bezpečnosti SecPublica 2016. Jejím heslem je "securitas, res p…
16.03 Příklad na pohovor s programát…
mstr
Na blogu jsem uveřejnil několik příkladů z pohovorů s uchazeči o místo programátora. Dovolím si tedy uveřejnit jeden z dalších možných příkl…
15.03 IDisposable v příkladech
viga
Rozhraní IDisposable slouží k uvolnění “unmanaged” zdrojů. Nejčastěji to jsou různé objekty z Win32API (otevřené soubory, síťové spojení, GD…

C# 7 je vonku

liero - 14. 3. 2017 13:10 - 2661 views

Visual Studio 2017 prináša aj novú verziu C# 7 o ktorej som už písal skôr - po nemecky :)

Tu je prehľad niektorých nových prvkov:

Tuples

Ak ste programovali v jazyku swift, tak je to presne to isté. V pricípe:

//namiesto 
var a = 1
var b = 2
var c = 3

//mozete napisat
var (a, b, c) = (1, 2, 3)

//aj takto sa da :)
(a, b) = (b, a)

 

//C# 6
public Tuple<Workout, double> GetWeeksBestWorkout() { ... return new Tuple<Workout, double>(workoutWithMostCalsBurned, calories)l } //C# 7 public (Workout, double) GetWeeksBestWorkout(); //ale takto to uz dava viacej zmysel: public (Workout workout, double calories) GetWeeksBestWorkout();

Deconstruction

//konzumovat sa to da takto:
(Workout workout, double calories) = GetWeeksBestWorkout();
var (workout, calories) = GetWeeksBestWorkout();

//ale aj takto:
var week = GetWeeksBestWorkout;
Console.Write(week.workout);
Console.Write(week.calories);

var name = ("John", "Doe");
Console.Write(name.Item1 + " " + name.Item2); 

var (firstName, lastName) = name;
Console.Write(firstName + " " + lastName); 


Pattern matching

//C# 6
BikeWorkout bike = workout as BikeWorkout;
if (bike != null)
{
   return !"I biked {bike.Distance} miles
}

//C# 7
if (workout is BikeWorkout bike)
{
   return !"I biked {bike.Distance} miles
}

//ale zaujimave to zacina byt vo switch statemente:
switch(workout)
{ case null: return null; case BikeWorkout bike where bike.Distance < 1: return $"I biked today less than one mile; case BikeWorkout bike: return $"I biked today {bike.Distance}" meters"; default: return workout.Title; }

Expression bodied members

v C# 6 pribudli expression bodied properties and methods:

public class MyClass
{
    public bool CanSave => true;
    public bool CanExecute() => true;
}


v C# 7 toho uz pomocou lamba vyrazov dokazeme viac: 

public class Person
{
   public string Name { get; }
   public Person(string name) => this.Name = name ?? throw new ArgumentNullException(name);
   public bool CanSave
   {
      get => true;
      set => throw new NotImplementedException();
   }
}

 

Out variables

//C# 6
int number;
if (int.TryParse(strInput, out number)){
   Console.Write(number);
}

//C# 7
int.TryParse(strInput, out int number){
   Console.Write(number);
}

if (!int.TryParse(strInput, out *){
   throw new FormatException();
}


je toho viac, lokalne funkcie ala funkcie vo funkciach, ref navratove hodnoty a lokalne premenne, async metody uz nemusia vracat Task alebo void, a dalsie, vid .NET Blog: New Features in C# 7.0


Daniel Turan

MCPD Web Developer, Certified Avanade SCRUM Professional Developer;
WPF, Silverlight, Windows Phone, Windowse Store app developer,
TypeScript, JavaScript

Článkov: 1, Správičiek: 89, Príspevkov vo fóre: 1500, Príspevkov v blogu: 0, Bodov: 9340
Najaktívnejší č.: 6
Profil používateľa

Reakcie

# RE: C# 7 je vonku 14. 3. 2017 15:50:27 liero

len tak so zaujimavosti. Chyba vam v C# este nejaka zasadna feature?

Mna momentalne napada iba jedna zasadna zalezitost:

Eventy v C# niesu First Class Citizen, cize ich nieje mozne priradit do premennej a posielat ako parameter.

Napriklad v F# to vyriesili tak, ze implementovali eventy ako IObservable sekvencie, co sa mi ako riesenie velmi paci.

BTW, mozete za to zahlasovat tu: https://github.com/dotnet/roslyn/issues/298#issuecomment-275374126

# RE: C# 7 je vonku 14. 3. 2017 16:42:35 vlko

mne este chyba constructor properties ako v typescripte constructor Parameter properties
take:
public class Person
{
public Person(private string name)
}

ale mam pocit ze to zrusili (v alpha c# 6 to bolo implementovane), lebo vela ludi pouziva konvenciu _name.

# RE: C# 7 je vonku 14. 3. 2017 16:54:56 liero

Ano. V mne osobne to az tak nechyba. To sa mi uz viac paci F# sposob: MyClass1(x: int, y: int)

# RE: C# 7 je vonku 14. 3. 2017 18:02:37 liero

pridavam moj prvy realne pouzitie Tuples:

public async static Task Run()
{
var services = new List<(string swaggerFile, string serviceName)>
{
("services.swagger.json", "Uisp"),
("test-center.swagger.json", "Identify")
};

await GenerateCommonClasses(services.Select(s => s.swaggerFile));

foreach(var service in services)
{
await Generate(Path.Combine(outputFolder, service.swaggerFile), service.serviceName);
}

}

Aby som sa vyhol porusovaniu DRY principu, potreboval som spojit nazovSuboru s nejakym inym nazvom.

V C# 6 by som pouzil bud dicionary, alebo stary genericky Tuple[T, T] ale tym by som v kode prisiel o nazvy (swaggerFile a ServiceName). Musel by som to pisat do komentara, ale komentar je vlastne len magic string.

Druha moznost by bola vytvorit si na to specialnu triedu, co by bolo pre toto jedno pouzitie overkill, navyse by sa zhorsila citatelnost. A neviem, kto by pre tu triedu vymyslel vhodny nazov :)

# RE: C# 7 je vonku 15. 3. 2017 20:36:15 harrison314

Pre mna tieto novinky s Tuples nie su az tak zasane, myslim, ze v drvivej vacsine pripadovsi dana struktura zasluzi svoj vlastny typ.

Ale vitam Pattern matching.
A chyba mi tam davnejsie prezentovana ale zrusena featura - non nulalble typy.

# RE: C# 7 je vonku 15. 3. 2017 20:49:17 Liero (anonym)

To je fakt! Na non-nullable typy som sa aj ja tesil

# RE: C# 7 je vonku 16. 3. 2017 16:22:35 T (anonym)

Podla mna by bola skor zaujimava diskusia o tom, co vyhodit resp. zakazat pouzivat.

# RE: C# 7 je vonku 16. 3. 2017 18:09:41 liero

@T: to sa zrejme nikdy nestane, ale na svojich projektoch to vies pomerne lahko zakazat nejakym code analyzerom. Ale inak dobra tema na blog :)

# RE: C# 7 je vonku 17. 3. 2017 12:57:52 T (anonym)

JJ, nastroje ktore sa daju pouzit su jasne na vynycovanie nejakych pravidiel...mne islo skor o to, ze zaujimava diskusia by mohla byt o tom, kam vedu niektore zapisy z hladiska napr. productivita vs. citelnost kodu dokonca vs. OOP/SOLID principom vs. junior...a C# z hladiska variability zapisov zacina byt neunosny...

# RE: C# 7 je vonku 17. 3. 2017 13:10:50 liero

Hovorim, napis o tom blog, urcite sa strhne zaujimava diskusia okolo toho.

Mne tuples pridu velmi prirodzene. Funkcie vo funkciach tiez. A lambdy sme tu uz mali davno, to ze teraz nimi vieme zapisat takmer vsetko mi pride stale este systematicke. Ten zapis tried, co spominal @vlko sa mi uz do C# nehodi.

Mne by sa napriklad pacilo, keby sme vedeli v jednom projekte kombinovat viacero jazykov, napr C# a F# :)

# RE: C# 7 je vonku 17. 3. 2017 13:14:58 harrison314

To suhlasim, pre mna su trnom v oku Expression bodied members. Takisto obcas API, ktore je doslova prelabdovane.

# RE: C# 7 je vonku 17. 3. 2017 13:43:49 T

Ty pises spravicky aby sa diskutovalo a ja mam pisat blog?
Ano, je mi jasne, ze ked hodim konkretne uvahy do placu, tak sa lahsie nastartuje...

priklad Tuples -> ak pouzivas s rozumom ok, ak zacnes nahradzat za tuples aj tie situacie kde je rozumne vracat tiedu lebo solid resp. OCP,LSP ....

# RE: C# 7 je vonku 17. 3. 2017 15:08:45 liero

@T: "Ty pises spravicky aby sa diskutovalo a ja mam pisat blog?" :))

Ja len ze si to zasluzi podrobnejsiu uvahu. Kym nebude nove "vyvojari.sk" hotove, tak toto nieje az take dobre miesto na dlhsie komentare

# RE: C# 7 je vonku 17. 3. 2017 16:12:14 T

Kazda z tych veci si zasluzi uvahu a to ze neexistovali "Tuples" ma svoj historicko/OOP puristicky dovod...

# RE: C# 7 je vonku 17. 3. 2017 20:25:21 harrison314

"priklad Tuples -> ak pouzivas s rozumom ok, ak zacnes nahradzat za tuples aj tie situacie kde je rozumne vracat tiedu lebo solid resp. OCP,LSP .... "
Toto myslim plati zo vstekymi featires C# od 3.5, ja som sa davnejsie vyjadroval ku var http://harrison314.github.io/VarAndDynamic.html
Mna dost zaujima ako sa k tomu postavia tooly ako SonarLint alebo StyleCop.

# RE: C# 7 je vonku 17. 3. 2017 21:33:32 liero

ked tak nad tym rozmyslam, len moj sample sa dal celkom pekne spravit cez array anonymnych tried namiesto List<(string swaggerFile, string serviceName)>

# RE: C# 7 je vonku 22. 3. 2017 12:39:04 T (anonym)

A dokonca aj neanonymnych :-D

# RE: C# 7 je vonku 22. 3. 2017 12:39:47 T (anonym)

@harrison:
suhlas s tym 3.5+
postavia sa tak, ako si nakonfigurujes pravidla

# RE: C# 7 je vonku 22. 3. 2017 14:48:58 liero

@T: viem, ze si to myslel ako sradnu, ale vytvarat triedu kvoli nejakej jednorazovej kalkulacii v ramci jednej metody je horsie riesenie ako Tupple, alebo anonymna trieda.

Nic by som nenamietal, keby to bol return type, alebo parameter nejakej public metody. Ale v tom mojom sample by ti co priniesla trieda, okrem bordelu?

Takto som si jasne zadefinoval, ze tuto strukturu pouzivam iba lokalne. Rozdelit kus kodu, ktory patri do jednej metody do viacerych tried a suborov je nielen kontraproduktivne, ale tym aj uzmoznujes reusovat nieco co nieje urcene na reuse.

Navyse, v tomto konkretnom priklade sa ani neda vymysliet rozumny nazov triedy. Proste to nieje nic ine ako par hodnot swaggerFile a serviceName. Akykolvek nazov triedy by v tomto pripade bol menej popisny ako definicia toho Tuple a nazov premennej.

# RE: C# 7 je vonku 22. 3. 2017 18:16:07 T (anonym)

@liero: uhol pohladu, to, ze vytvoris explicitnu triedu, ktoru slusne pomenujes pomaha citatelnosti... z hladiska rigidneho OOP sa tiez da argumentovat ze ta metoda v reale by bola asi sucast niecoho komplexnejsieho...napriklad domenoveho modelu(priklad workoutu) v tom pripade je tento argument na druhu a urcite by to malo krasny nazov :-) Asi tu neriesime tvorbu nejakeho rychleho kodu na jedno pouzitie ale principy. Urcite sa da vymysliet rozumny nazov triedy aj pre ten druhy pripad v diskusii ;-) a urcite sa cely ten kod da navrhnut poriadne objektovo.

# RE: C# 7 je vonku 22. 3. 2017 18:18:57 T (anonym)

(ale ja som stara skola, mna nemesis pocuvat a tiez obcas byvam lenivy alebo sa snazim byt extremne produktivny ;-) a vtedy nepocuvam ani ja svoje rigidne ja :-)

# RE: C# 7 je vonku 22. 3. 2017 20:08:26 Liero (anonym)

Jedine co chcem povedat je, ze C# davno nieje rigidne objectovo orientovany jazyk a to je dobre, lebo OOP nieje vzdy najvhodnejsi pristup.

# RE: C# 7 je vonku 23. 3. 2017 6:37:56 T (anonym)

@liero: to je zase taka dost povrchna veta ale nechce sa mi tu disukusiu tahat dalej, lebo uz to zacne vyznievat malicherne. Keby som sa opytal, ze kedy nie je OOP lepsi pristup? Je to pripad, kedy nie je vhodnejsi funkcionalny, kde je tiez rigidnost na mieste? a ak sa hodi funct, ci v takom pripade je C# lepsou volbou ako F# alebo klasicky fun. jazyk? smerovanie c# ovplyvnil do velkej miery linq, co je domenovo spec.(lepsi preklad asi problemovo orientovany) jazyk v podstate a je fajn, ze je tam ale je otazka ci vlastbosti, ktore podnietil prispievaju kvalite kodu ked ludia nie su nuteni abi rozmyslat preco sa pri oop maju vyhybat vracaniu tuples. ale skus dalej rozviest to co si napisal ak chces, ale musis byt konkretnejsi, inak to je diskusia o pocitoch.

# RE: C# 7 je vonku 23. 3. 2017 12:16:07 liero

Ok, skusim to otocit inak. Moje mentalne nastavenie je take, ze to spravim najjednoduchsie ako sa da (ale nie jednoduchsie).

Samozrejme beriem do uvahy rozne -ilities (maintabability, readability, reusability ale aj simplicity).

Nato, aby som pouzil komplikovanejsie riesenie musim mat dovod. Napriklad v mojom sample mi je reusability nanic. Readability je myslim porovnatena s extra triedou ak nie lepsia a maintanability tiez -> vyhralo jednoduchsie riesenie

Argument, ze lebo OOP ja neprijmem (vzdy som mal problem uznavat autority :) )

Kym v danom rieseni nenajdem benefit pre moju konkretnu situaci, vzdy siahnem po jednoduchom rieseni, hoc je to aj proti prudu.

Moja skusenost je taka, ze vzdy ked som zacal sposobom "idem to robit tak ako sa ma", tak som dopadol tak, ze to bolo prilis komplikovane, tym padom trpela maintanability a readability, dosiahol som reusability tam kde som nic nereusoval a ked som nieco chce reusovat, tak sa nedalo, lebo to nesplnalo nove poziadavky.

# RE: C# 7 je vonku 23. 3. 2017 17:34:41 T (anonym)

Vyhol si sa otazkam :-)
Samozrejeme, na kode s nizkou komplexnostou a ocakavanymi zmenani je tazke nejako systematicky argumentovat, toto ani nebudem riesit, tu je takmer jedno v com to napises, akom fmwk a hoci aj proceduralne.
To, ze Ty benefit v niecom nevidis moze byt aj o tom, ze si sa nikdy nezamyslal mozno hlbsie nad niektorymi paradigmami programovania vratane OOP a co znamenaju v kontexte napr. komplexného projektu a nejakých zmien. Mne tiez vela precitaneho zacina davat zmysel az po rokoch rokoch. Samozrejme pristup ze pouzit primerane riesenie specifikam projektu je spravny a aj rigidnost ma zmysel tak ako pises az vtedy, ked ju vies obhajit vo vztahu ku nejakému cielu.

"Idem to robit tak ako sa ma"....ano, to je pasca, pretoze neexistuje jedina architektura a pristup, ktora by bol univerzalny pre vsetky riesenia. Ale ked mam byt uprimny, tak napr. pri vyvojari.sk si sa vydal uplne zlou cestou a nedokazal som Ti to vyhovorit a to len preto, ze si bol ovladany nejakym trendom a nevedel si odolat jeho aplikovaniu, hoci tie pristupy maju v DNA napisane, ze ich treba pouzit len vtedy a v takej forme aby mali opodstatnenie :-)

# RE: C# 7 je vonku 23. 3. 2017 23:24:55 liero

Nieze som nevedel odolať, chcel som si to vyskúšať na niečom co sa nedá pokaziť. Henta časť je tak 10% celého effortu a kedykoľvek sa to da vyhodit

# RE: C# 7 je vonku 24. 3. 2017 10:26:26 T (anonym)

Ja to chapem, chapes aj Ty tu pointu, ze si si to chcel vyskusat tam, kde to nema opodstatnenie, takze si to v podstate nevyskusas :-)? A fakt by som sa na to vykaslal, cielom by malo byt co najskor hodit von novu verziu a minalizovat riziko, ze 1,5 cloveka co na tom robi sa dostatne do nejakej novej zivotnej situacie a prestane

# RE: C# 7 je vonku 26. 4. 2017 13:41:06 liero

Na stackoverflow sa da hlasovat za najoblubenejsie C#7 features: http://stackoverflow.com/documentation/c%23/1936/c-sharp-7-0-features#t=201704261140444141216

Tuples zatial vedu

Pridať reakciu

Titulok:
Meno:
Url:
Koľko je 22 + 4?
(ochrana proti spamu)
Komentár:

Najaktívnejší užívatelia
1. 37750 b. photo vlko
2. 21315 b. photo T
3. 15955 b. photo spigi
4. 15450 b. photo Anonymous
5. 11110 b. photo dudok
6. 9340 b. photo Liero
7. 6885 b. photo siro
8. 6245 b. photo slavof
9. 5355 b. photo duracellko
10. 4445 b. photo xxxmatko