33

How Might C# 7 Look Like?

Embed Size (px)

Citation preview

Page 1: How Might C# 7 Look Like?
Page 2: How Might C# 7 Look Like?

Kakšen bo morda C# 7.0?Damir Arh, Razum d.o.o.Microsoft MVP@DamirArhhttp://www.damirscorner.com

Page 3: How Might C# 7 Look Like?

AgendaVisual Studio 2015 in RoslynPrevajalnik kot odprtokodni projektNovosti v C# 7.0

Page 4: How Might C# 7 Look Like?

Prevajalnik kot storitev

Formatter

Colorizer

Outlining

Navigate To

Object Browser

Completion List

Find

All References

Rename

Quick Info

Signature Help

Extract

Method

Go To Definition

Edit

and

Continue

Syntax Tree API Symbol API Binding and

Analysis API Emit API

ParserSymbols

Binder IL EmitterMetadata

Import

Izvorna koda

Izvršljiva

datoteka

Language

Service

Compiler API

Compiler

Pipeline

Prevajalnik

Page 5: How Might C# 7 Look Like?

Uporaba v Visual Studiu 2015

Page 6: How Might C# 7 Look Like?

Hitrejši nadaljnji razvojVisual Studio 2015 Update 1(november 2015)

Interaktivno oknoIskanje implementacijIzboljšave statične analize kode

Visual Studio Update 2(marec 2016)

Interaktivno okno za projektMehko iskanje razredovDeterministično prevajanje kodeVisual Studio „15“ Preview

(marec 2016)

Uveljavljanje definiranega sloga izvorne kodeSpreminjanje datotek XAML med izvajanjem aplikacijeEksperimentalne razširitve C#

Page 7: How Might C# 7 Look Like?

Uporaba v drugih projektih

Page 8: How Might C# 7 Look Like?
Page 9: How Might C# 7 Look Like?
Page 10: How Might C# 7 Look Like?
Page 11: How Might C# 7 Look Like?
Page 12: How Might C# 7 Look Like?
Page 13: How Might C# 7 Look Like?

Kratka zgodovina C#

Generiki(2005)

LINQ(2007)

dynamic(2010)

async(2012)

Roslyn(2015)

Page 14: How Might C# 7 Look Like?

Ključne teme C# 7.0Delo s podatkiZanesljivostUčinkovitost

Page 15: How Might C# 7 Look Like?
Page 16: How Might C# 7 Look Like?

Ujemanje vzorcevObjektno usmerjeni jezikiVnaprej znane operacijeEnostavno dodajanje podatkovnih tipovPolimorfizem

Funkcionalni jezikiVnaprej znani podatkovni tipiEnostavno dodajanje operacijUjemanje vzorcev

Page 17: How Might C# 7 Look Like?

Ujemanje vzorcev

Visual Studio „15“ Preview

Page 18: How Might C# 7 Look Like?

Kaj smo videli?Operator „is“ z deklaracijo spremenljivkeStavek „switch“ z ločevanjem po tipuDodatni pogoj v stavku „case“

Page 19: How Might C# 7 Look Like?

Stavek „switch“ v izrazustatic State Request(this State state, Transition transition) => (state, transition) match ( case (State.Running, Transition.Suspend): State.Suspended case (State.Suspended, Transition.Resume): State.Running case (State.Suspended, Transition.Terminate): State.NotRunning case (State.NotRunning, Transition.Activate): State.Running case *: throw new InvalidOperationException() );

 

Page 20: How Might C# 7 Look Like?

Terkepublic (int weight, int count) Stocktake(IEnumerable<IWeapon> weapons){ var w = 0; var c = 0; foreach (var weapon in weapons) { w += weapon.Weight; c++; } return (w, c);}

Page 21: How Might C# 7 Look Like?

public class Sword(int Damage, int Durability);public class Sword : IEquatable<Sword>{ public int Damage { get; } public int Durability { get; }

public Sword(int Damage, int Durability); public bool Equals(Sword other); public override bool Equals(object other); public override int GetHashCode(); public static void operator is(Sword self, out int Damage, out int Durability); public Sword With(int Damage = this.Damage, int Durability = this.Durability);}

Zapisi

Page 22: How Might C# 7 Look Like?

Nespremenljivi razrediPoenostavljena sintaksa

IWeapon sword = new Sword { Damage = 5, Durability = 500 };

IWeapon strongerSword = sword with { Damage = 8 };

public Sword With(int Damage = this.Damage, int Durability = this.Durability) => new Sword(Damage, Durability);

IWeapon strongerSword = sword.With(Damage: 8);

Page 23: How Might C# 7 Look Like?

Varna uporaba neobveznih vrednostiSpremenljivka dovoli ničelne vrednosti?IWeapon? canBeNull;IWeapon cantBeNull;

Statično preverjanje pri prirejanjucanBeNull = null; // no warningcantBeNull = null; // warningcantBeNull = canBeNull; // warning

Nezdružljivost z obstoječo kodo

Page 24: How Might C# 7 Look Like?

Lokalne funkcijestatic void ReduceMagicalEffects(this IWeapon weapon, int timePassed){ double decayRate = CalculateDecayRate(); double GetRemainingEffect(double currentEffect) => currentEffect * Math.Pow(decayRate, timePassed);

weapon.FireEffect = GetRemainingEffect(weapon.FireEffect); weapon.IceEffect = GetRemainingEffect(weapon.IceEffect); weapon.LightningEffect = GetRemainingEffect(weapon.LightningEffect);}

Page 25: How Might C# 7 Look Like?

Rezultati funkcij in spremenljivke po referenci[Test]public void LocalVariableByReference(){ var terrain = Terrain.Get();

ref TerrainType terrainType = ref terrain.GetAt(4, 2); Assert.AreEqual(TerrainType.Grass, terrainType);

// modify enum value at the original location terrain.BurnAt(4, 2); // local value was also affected Assert.AreEqual(TerrainType.Dirt, terrainType);}

public ref TerrainType GetAt(int x, int y) => ref terrain[x, y];

Page 26: How Might C# 7 Look Like?

Rezinevar array = new int[] { 1, 2, 3, 4, 5 };var slice = Array.Slice(array, 0, 3);

1 2 3 4 51 2 3array

slice

Page 27: How Might C# 7 Look Like?

Visual Studio „15“ PreviewUjemanje vzorcevLokalne funkcijeRezultati funkcij in spremenljivke po referenciBinarne konstantne vrednostiLočila med števkami

Page 28: How Might C# 7 Look Like?

Naslednji korakiPraktični preizkusSpremljanje zapiskov na GitHubuSodelovanje v diskusijahPrevod in preizkus izvorne kode…

Page 29: How Might C# 7 Look Like?

DNC Magazine

Page 31: How Might C# 7 Look Like?
Page 32: How Might C# 7 Look Like?

Izpolnite anketo! Vam je bilo predavanje všeč? Ste se naučili kaj novega?

Vaše mnenje nam veliko pomeni!

Da bo NT konferenca prihodnje leto še boljša, vas prosimo, da izpolnite anketo o zadovoljstvu, ki jo najdete v svojem NTK spletnem profilu.

Page 33: How Might C# 7 Look Like?

© 2015 Microsoft Corporation. All rights reserved.