Nuove funzionalitA’ e caratteristiche del linguaggio

Slides:



Advertisements
Presentazioni simili
1 Le s-espressioni. 2 Un nuovo esempio completo: le s-espressioni Sexpr 4 alberi binari (possibilmente vuoti) che hanno sulle foglie atomi (stringhe)
Advertisements

Interfacce Java.
Oggetti Java.
Ambienti di sviluppo e manuali di programmazione
Vincenzo Campanale PM Security & Management System Center, DSI e la Roadmap.
JPA Overview della tecnologia. Java Persistence Architecture Definita nella JSR-220 EJB 3.0 ( Tentativo di unificare EJB2.1 con.
Alcune Classi Standard Object, Vettori. Esercizio dellultima volta Superclasse Persona Sottoclasse Libro.
Esercizio 2. Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni di classe.
Sequential Statements. – Il VHDL simula lo svolgersi in parallelo di varie operazioni – Loggetto fondamentale e il PROCESS – Un PROCESS contiene una serie.
Tipi di dato e controllo del flusso Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA.
Pierluigi Plebani - Politecnico di Milano MAIS Registry URBE (Uddi Registry By Example) WP2 Roma - 25 Novembre 2005.
Layouts and Graphics. component - container - layout Un Container contiene [0 o +] Components Il Layout specifica come i Components sono disposti nel.
Esempio: Tombola! Parte seconda.
Unified Modeling Language class C {…} class B extends C {…} Esiste una notazione grafica per mostrare le relazioni di ereditarietà. Object StringC B Tutte.
J0 1 Marco Ronchetti Java Threads & Sincronizzazione.
Modificatori: static Variabili e metodi associati ad una Classe anziche ad un Oggetto sono definiti static. Le variabili statiche servono come singola.
Richiami di Java Multithreading. Threads (subclassing) public class A { public void a_method { C t = new C(); //C t = new C(String name); t.start(); …
Sezione: Costruttori Costruttori. Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore.
prompt> java SumAverage
1 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila();
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
Specifiche senza JML: uso delle asserzioni. 2 Asserzioni in Java Dal jdk 1.4 (da Febbraio 2002) cè meccanismo per gestire asserzioni Asserzione: espressione.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
1. Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali.
1 Esercitazione sui segnali Problema: creare un programma analizzatore di file testuali che prenda come argomenti il nome di un file e una sequenza di.
Programming with JXTA Hello World Peer discovery Peer Group discovery Creating Peer group Joining a Peer Group.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 3 - Functions Outline 3.1Introduction 3.2Program Components in C++ 3.3Math Library Functions 3.4Functions.
Università La Sapienza Ingegneria del Software I 1 Ingegneria del software I Seminario 2: Microsoft.NET.
1 Implementazione di Linguaggi 2 PARTE 6 Implementazione di Linguaggi 2 PARTE 6 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
Packages. Package: insieme di classi e interfacce in relazione Per formare un package basta inserire la direttiva come prima istruzione nel file sorgente.
Lezione IX Laboratorio di Programmazione. Le Classi Una classe C++ è definita come segue: class Nomeclasse { private: // metodi e attrib. visibili solo.
SQL Server 2012 LocalDB.
Introduzione a typescript
Project Review byNight byNight December 6th, 2011.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2003/2004.
14° Workshop – DotNetMarche :: Castelfidardo, 16 Aprile 2010 Introduzione ai framework per IoC / DI e AOP.
Attribution-NonCommercial-ShareAlike Le novità
void binario(int n); …………………
24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente,
Ese 2 (del 31 Marzo 2004). Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Soluzioni 1.Struttura base soluzione 2.Lettura dei tasti 3.Identificazione dei tasti 4.Accensione dei LED 5.Rotazione dei LED 6.Rotazione dei tasti fino.
Visual Studio Tools for Office: Developer Solutions Platform Fulvio Giaccari MCSD.NET / MCT Responsabile Usergroup ShareOffice Blog:
Test con JUnit. zJUnit è un ambiente di test per programmi Java ySviluppato da Kent Beck É possibile usare JUnit allinterno di Eclipse per eseguire i.
Project Review Novembrer 17th, Project Review Agenda: Project goals User stories – use cases – scenarios Project plan summary Status as of November.
Project Review Novembrer 17th, Project Review Agenda: Project goals User stories – use cases – scenarios Project plan summary Status as of November.
Giovedì 17 Aprile 2008 Heroes {Community} Launch Giovedì 17 Aprile 2008.
1 Simulated multiple inheritance Sandro Pedrazzini Approfondimento Simulated multiple inheritance in Java.
1 Applet ed HTML Fondamenti di Informatica Corso D.
Collection & Generics in Java
Esercizi.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Lezioni 1-2.
Dynamic SQL.
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
Oggetti in C# Lezione 2 Metodi e Static Oggetti in C# - Lezione 2.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Esercitazione sull’ ordinamento 20 maggio 2003
Stringhe in Java. Definire una stringa. Definire una stringa in Java Il modo più semplice e diretto per creare un oggetto di tipo String è assegnare alla.
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
Java World Introduzione.
Condizioni decisionali
Corso Java Introduzione.
Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.
Condizioni decisionali
Java Costruttore di copia e GetStatus.
Condizioni decisionali
Java Introduzione.
Corso di programmazione, Simulazione, ROOT, code, ecc. ecc.
Transcript della presentazione:

Nuove funzionalitA’ e caratteristiche del linguaggio Le novità di C# 6 Nuove funzionalitA’ e caratteristiche del linguaggio

Mi presento Ing. Antonio Pelleriti Twitter: @zetanove Mail: info@antoniopelleriti.it Web: www.antoniopelleriti.it Ultimo libro: Programmare con C# 5, LSWR 2014

Un grazie a

Agenda C# ieri e oggi Le novità di C# 6 Demo

C# 1.0 2002 Prima versione di C# Linguaggio ufficiale di .NET

C# 2.0 2005 Generics Tipi parziali Metodi anonimi Iteratori get/set accessibilità separata Classi static Altro ancora…

C# 3.0 2007 Variabili di tipo implicito Inizializzatori di oggetti e di collezioni Auto-properties Tipi anonimi Metodi di estensione Query expressions Espressioni Lambda Metodi parziali E altro ancora…

C# 4.0 2010 Dynamic binding Argomenti denominati e opzionali Generics co/controvarianza E altro ancora…

C# 5.0 2012 Async Caller info attributes Altro…

Le novità di C# 6 Cosa vedremo in C# 6 Auto-Property Initializers Using per membri statici Exception filter Index Inizializers (dizionari, ecc.) Null propagation Await in catch/finally Expression-bodied members Nameof String interpolation

Forse in C# 6 E cosa forse vedremo in C# 6 Primary constructor Indexed member access Dichiarazione inline di variabili Binary literals e separatori di cifre Inizializzatori di eventi params IEnumerable

Auto property initializers Inizializzazione di proprietà automatiche public class Persona { public string Nome{ get; set; } public string Cognome{ get; set; } } = "Antonio"; = "Pelleriti" L’inizializzatore agisce direttamente sul backing field. Non usa il set della proprietà. Gli inizializzatori sono eseguiti nell’ordine di apparizione Non possono usare this, dato che vengono eseguiti prima che l’oggetto sia stato inizializzato. Con I costruttori primari potrebbero essere inizializzati con i parametri dei costruttori stessi

Getter only auto property initializers Anche in sola lettura public class Persona { public string Nome{ get; } = "Antonio"; } public class Persona { public string Nome{ get; } //Errore in C# 5 public Persona(string nome) Nome=nome; //Errore in C# 5 } NB in VS 2014 CTP le proprietà get only possono essere inizializzate solo con gli inizializzatori non nel costruttore Le proprietà automatiche possono ora anche avere il solo get Implementate con backing field readonly 2) E quindi possono essere inizializzate anche nel costruttore

Using static members Using di classe, permette di usarne i membri statici using System.Console; using System.Math; class Program { static void Main() WriteLine(Sqrt(3*3 + 4*4)); }

Exception Filter Catturare un’eccezione se si verifica una condizione catch(Exception ex) if(cond1) { } catch(Exception ex1) if(cond2) private static bool Log(Exception e) { /* log it */ ; return false; } … try { … } catch (Exception e) if (Log(e)) {} Gli exception filters sono particolarmente indicate per il catche rethrow perchè lascia lo stack invariato Una pratica commune di abuso accettato è quella di usare I filtri per il logging delle eccezioni, senza catturarla. Basta chiamare un metodo che fa il log e restituisce false.

Index initializer 1/1 Nuova sintassi per inizializzare dizionari o oggetti con indicizzatori var numbers = new Dictionary<int, string> { { 7 , "seven" }, { 9 , "nine" }, { 13 , "thirteen" }, }; var numbers2 = new Dictionary<int, string> [7] = "seven", [9] = "nine", [13] = "thirteen" Object e collection initializer introdotti con C# 3 forniscono una sintassi per inizializzare campi e proprietà di un oggetto, o per riempire collezioni con un insieme iniziale di elementi. L’inizializzazione di dizionari o di altri oggetti con indicizzatori è meno elegante (per qualcuno), quindi è stata aggiunta una sintassi per assegnare dei valor alle chiavi Usando un indicizzatore qualunque della classe. L’esempio numbers mostra che la differenza non è poi così ampia. Ma provando con una classe custom con indicizzatore

Index initializer 1/2 Classe con indicizzatore public class Person { public string this[int index] get return numbers[index]; } set numbers[index] = value; Inizializzazione con indicizzatore var persona = new Person("antonio") { [0] = "1628692", [3] = "0299992", }; Ma provando con una classe custom con indicizzatore public class Person { public string Name { get; set; } public Person(string name) Name = name; } public string[] numbers = new string[5]; public string this[int index] get return numbers[index]; set numbers[index] = value;

Null conditional Null Propagation operator ? string str=…; int? len; if(str!=null) len=str.Length; int? len= str?.Length; //null se str==null char? first=str?[0]; Spesso il codice diventa pieno di check per evitare null reference exception L’operatore null propagating, o null conditional consente di accedere ad un membro solo se l’oggetto è non null Inoltre può essere usato con membri come indicizzatori, e come dice il nome propagation, in maniera concatenata. Con comportamento di corto circuito, appa trova un membro null, restituisce null string str = null; int? len = str?.Length; char? primo = str?[0]; Console.WriteLine(len); Console.WriteLine(primo); Person p = null; string city = p?.MyAddress?.City?.ToLower(); public class Person { public Address MyAddress { get; set; } } public class Address { public string City { get; set; }

await in catch/finally In genere errore di compilazione Cannot await in the body of a catch clause try{} catch { await MetodoAsincrono(); //errore in C# 5 } In c# 5.0 non era possibile, costringendoci a workaround come variabili booleane o altre amenità, tutto ciò perché ci è stato detto che era impossibile implementare tale feature. In C#6, è possibile, quindi, evidentemente, non era così impossibile. O perlomeno, hanno capito come farlo: sicuramente non è stato semplice, e non ci interessa sapere come funziona: questo è il vantaggio di avere funzionalità asincrone supportate nativamente dal linguaggio.

Expression bodies members Utilizzo di espressioni lambda per implementare il corpo di proprietà public string Completo => String.Format("{0} {1}", Nome, Cognome); metodo public void Print(string title) => Console.WriteLine(title+" "+Nome + " " + Cognome); operatore public static implicit operator string (Person p) => p.Nome + " " + p.Cognome; Metodi, proprietà, operatori possono essere implementati utilizzando come loro corpo un’espressione labda

nameof Operatore nameof int x = 0; string name=nameof(x); Console.WriteLine("{0}={1}", name, x); name=(nameof(Person.Address.ZipCode)); // returns "ZipCode" Certe volte è necessario stampare o ricavare una stringa che rappresenta il nome di alcuno elementi del programma, Per esempio per passare ad ArgumentException il nome dell’argomento colpevole Oppure generando un evento PropertyChanged per indicare il nome della prop Il tutto è naturalmnente fattibile con le stringhe, ma oltre a essere soggetto a errore di battitura, non va d’accordo con esigenze di refactoring L’operatore nameod (if x == null) throw new ArgumentNullException(nameof(x)); Si possono usare come operandi anche nomi di membri con sintassi dotted, l’operatore restituisce l’ultimo WriteLine(nameof(Person.Address.ZipCode)); // prints "ZipCode" Non è come reflection, perchè il compilatore sostituisce direttamente il nome con una stringa

DEMO Visual Studio ’14’ CTP 4 prebuilt Azure VM images with VS "14" CTP 4 already installed. Alcune features funzionanti in ctp solo con <LangVersion>experimental</LangVersion> In csproj End User Preview on top of Visual Studio 2013. (note: this VS 2013 preview is no longer updated)

Link utili .NET Compiler Platform ("Roslyn") http://roslyn.codeplex.com/ C# 6 Language Features status https://roslyn.codeplex.com/wikipage?title=Language%20Feat ure%20Status VS 2015 preview http://www.visualstudio.com/en-us/downloads/visual-studio- 2015-downloads-vs

promo Programmare con C# 5 guida completa http://amzn.to/1x7sGHc

Domande