Le téléchargement de votre SlideShare est en cours. ×
0
C# et .NET                       Enigmes et Puzzles                        Clément Gatin, Luc Vo Van                      ...
Donnez votre avis !                   Depuis votre smartphone, sur :                    http://notes.mstechdays.fr    De n...
Présentation de Microsoft Enterprise Services                                                      Application Critiques (...
4 ouvrages écrits par 13 Microsofteeshttp://www.editions-eyrolles.com/livres/Windows-8-pour-les-professionnels
AgendaIntroduction et objectifsLes énigmes   1.   Typage explicite (ou pas)   2.   Plus Plus   3.   Remise à Zéro   4.   (...
INTRODUCTION ET OBJECTIFS
Pourquoi cette session ?Approfondir la connaissance d’un outil fondamentalApprécier la sophistication du compilateurRepart...
Visual C#Historique en brefSpécifications du langage
Enigme 0 : Où trouver la spécification ?A.   Sur InternetB.   Sur le blog d’Anders HejlsbergC.   Je l’ai toujours sur moiD...
Enigme 0 : Où trouver la spécification ?A.   Sur InternetB.   Sur le blog d’Anders HejlsbergC.   Je l’ai toujours sur moiD...
Visual C#Historique en brefSpécifications du langageILDASM
Merci d’être venus si nombreux !this.Warrior = true;C’est parti.
Enigme 1TYPAGE EXPLICITE (OU PAS)
{ typage explicite }        (ou pas)
Enigme 1 : Quel mot clé est recommandé?A. Typage expliciteB. varC. Aucun
Enigme 1 : Quel mot clé est recommandé?A. Typage expliciteB. varC. Aucun
En synthèseILDASM (Intermediate Language Disassembler) est livré avec Visual Studio etpermet de parcourir l’ILvar ou décla...
Enigme 2PLUS PLUS
{ i++ }
Enigme 2 : Qu’affiche le programme ?A. 1B. 2C. Ne compile pas
Enigme 2 : Qu’affiche le programme ?A. 1B. 2C. Ne compile pas
En synthèseC# spécifie les comportements de manière détailléeC’est la fin de l’échauffement !
(petit) rappelCLASSES ET STRUCTURES
La pile (stack)
La pile (stack)                  static void Main()                  {                      FaitQqch();                   ...
La pile (stack)                  static void Main()                  {                      FaitQqch();                   ...
La pile (stack)                  static void Main()                  {                      FaitQqch();                   ...
La pile (stack)                       static void Main()                       {                           FaitQqch();    ...
La pile (stack)                  static void Main()                  {                      FaitQqch();                   ...
Le tas (heap)
Le tas (heap)      User utilisateur = new User();
Le tas (heap)      User utilisateur = new User();      utilisateur.Name = "Luc";                                       Luc
Le tas (heap)     DateTime lucBirth = new DateTime(1979, 11, 28);                                               Luc      2...
Le tas (heap)     DateTime lucBirth = new DateTime(1979, 11, 28);     utilisateur.BirthDate = lucBirth;                   ...
Le tas (heap)     DateTime lucBirth = new DateTime(1979, 11, 28);     utilisateur.BirthDate = lucBirth;                   ...
Enigme 3REMISE À ZÉRO
{ Remise à Zéro }
Enigme 3 : Est-ce que ça compile ?A.   OuiB.   NonC.   Ca dépend des options du compilateurD.   Ca veut dire quoi « ça com...
Enigme 3 : Est-ce que ça compile ?A.   OuiB.   NonC.   Ca dépend des options du compilateurD.   Ca veut dire quoi « ça com...
En synthèseLe compilateur sait (assez) bien déterminer si les cheminsde construction initialisent tous les membresC’est un...
(petit) rappelDANS LES COULISSES DESPROPRIÉTÉS
{ Propriétés }
Enigme 4(D)ÉTONNANTE COMBINAISON
{ (D)étonnante Combinaison }
Enigme 4 : Qu’affiche le programme ?A.   False, FalseB.   False, TrueC.   False, NullReferenceExceptionD.   La réponse D
Enigme 4 : Qu’affiche le programme ?A.   False, FalseB.   False, TrueC.   False, NullReferenceExceptionD.   La réponse D
En synthèsePerformance sur les objets valeurs       Pas de garbage collection       Pas d’indirection de pointeurLes objet...
PréconisationsUtilisez les structs pour des objets de petite tailleEvitez les confusions en n’ayant que des structs dont l...
Enigme 5C# DANS TOUS SES ÉTATS
{ C# dans tous ses états }          yield return
Enigme 5 : Qu’affiche ce programmeA.   Nom1, Nom2, Clement, LucB.   Nom1, Clement, Nom2, LucC.   Clement, LucD.   Nom1, Nom2
Enigme 5 : Qu’affiche ce programmeA.   Nom1, Nom2, Clement, LucB.   Nom1, Clement, Nom2, LucC.   Clement, LucD.   Nom1, Nom2
Une machine à états ?                                                            4                          2             ...
Une machine à états ?               public static IEnumerable<string> GetNames()               {          1               ...
yield returnChaque yield return correspond à un étatLe code entre deux yield return correspond à unetransitionLe compilate...
{ C# dans tous ses états }          async await
async awaitChaque appel à une méthode préfixée de await est un étatLe code entre deux appels est une transitionLors d’un a...
En synthèseLe compilateur génère des machines à état, qui permettentd’implémenter les scénarios de « reprise »yield return...
Enigme 6BOUQUET FINAL
{ Bouquet final }
Enigme 6 : Qu’affiche ce programmeA. Alice a 10 ans, Bob a 11 ans, Charlie a 12 ans, Dave a   13 ansB. Alice a 10 ans, Ali...
Enigme 6 : Qu’affiche ce programmeA. Alice a 10 ans, Bob a 11 ans, Charlie a 12 ans, Dave a 13 ansB. Alice a 10 ans, Alice...
{ Bouquet final }     « The Encore »
Enigme 6 : Qu’affiche ce programmeA. Alice a 10 ans, Bob a 11 ans, Charlie a 12 ans, Dave a 13 ansB. Alice a 10 ans, Alice...
class Main_Scope2                                             class Main_Scope1                {                          ...
class Main_Scope1                class Main_Scope2                                             {                          ...
En synthèseLes closures sont un outil pratique et élégant dont lamécanique est implémentée par le compilateurLes breaking ...
Conclusion
En synthèseLes évolutions du langage C# sont principalement liées aucompilateur lui-même, avec peu de support spécifique d...
Pour finir          http://notes.mstechdays.frint i = 0;Console.Write(string.Format("{0} {1} {2} {3}",                ++i,...
Donnez votre avis !                   Depuis votre smartphone, sur :                    http://notes.mstechdays.fr    De n...
Développeurs                                                         Pros de l’IT http://aka.ms/generation-app       Forme...
Prochain SlideShare
Chargement dans... 5
×

C# et .NET : Enigmes et puzzles

668

Published on

Comme des millions de développeurs, vous utilisez C# quotidiennement … mais en maitrisez-vous les subtilités ? Cette session ludique vous plongera au cœur de votre langage de prédilection au travers programmes et exemples de code qui ne cesseront de vous surprendre. Avec en prime quelques (petits) lots à gagner pour les développeurs les plus perspicaces !

0 commentaires
1 mention J'aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Total des vues
668
Sur Slideshare
0
À partir des ajouts
0
Nombre d'ajouts
0
Actions
Partages
0
Téléchargements
33
Commentaires
0
J'aime
1
Ajouts 0
No embeds

No notes for slide
  • Intro code / dev
  • Notation
  • http://www.editions-eyrolles.com/livres/Windows-8-pour-les-professionnels/
  • [Luc]2001 avec .NET 1.0Conçu sur mesure pour la nouvelle CLR
  • [Luc]2001 avec .NET 1.0Conçu sur mesure pour la nouvelle CLR
  • [Luc]Prévu pour une centaine de personnesMontée progressive en sophistication dans les énigmesOn a pas pu upgrader les goodies
  • Clément
  • Clément
  • Luc
  • Luc
  • Luc
  • Clement
  • Clément
  • Version VS2010
  • Version VS2012
  • Notation
  • Transcript of "C# et .NET : Enigmes et puzzles"

    1. 1. C# et .NET Enigmes et Puzzles Clément Gatin, Luc Vo Van Consultants Dev MicrosoftCode / Développement
    2. 2. Donnez votre avis ! Depuis votre smartphone, sur : http://notes.mstechdays.fr De nombreux lots à gagner toutes les heures !!! Claviers, souris et jeux Microsoft… Merci de nous aider à améliorer les TechDayshttp://notes.mstechdays.fr
    3. 3. Présentation de Microsoft Enterprise Services Application Critiques (Tier1) Relation client et ressources (ERP / CRM) Collaboration & social Entreprise Microsoft Support Premier Strategy Consulting Services Productivité dans le Cloud Productivité On Premise Environnement de travail Datacenter et Cloud
    4. 4. 4 ouvrages écrits par 13 Microsofteeshttp://www.editions-eyrolles.com/livres/Windows-8-pour-les-professionnels
    5. 5. AgendaIntroduction et objectifsLes énigmes 1. Typage explicite (ou pas) 2. Plus Plus 3. Remise à Zéro 4. (D)étonnante combinaison 5. C# dans tous ses états 6. Bouquet final
    6. 6. INTRODUCTION ET OBJECTIFS
    7. 7. Pourquoi cette session ?Approfondir la connaissance d’un outil fondamentalApprécier la sophistication du compilateurRepartir avec quelques bonnes pratiquesSe tester !
    8. 8. Visual C#Historique en brefSpécifications du langage
    9. 9. Enigme 0 : Où trouver la spécification ?A. Sur InternetB. Sur le blog d’Anders HejlsbergC. Je l’ai toujours sur moiD. Dans l’aide F1 de Visual Studio
    10. 10. Enigme 0 : Où trouver la spécification ?A. Sur InternetB. Sur le blog d’Anders HejlsbergC. Je l’ai toujours sur moiD. Dans l’aide F1 de Visual StudioC:Program Files (x86)Microsoft Visual Studio 11.0VC#Specifications
    11. 11. Visual C#Historique en brefSpécifications du langageILDASM
    12. 12. Merci d’être venus si nombreux !this.Warrior = true;C’est parti.
    13. 13. Enigme 1TYPAGE EXPLICITE (OU PAS)
    14. 14. { typage explicite } (ou pas)
    15. 15. Enigme 1 : Quel mot clé est recommandé?A. Typage expliciteB. varC. Aucun
    16. 16. Enigme 1 : Quel mot clé est recommandé?A. Typage expliciteB. varC. Aucun
    17. 17. En synthèseILDASM (Intermediate Language Disassembler) est livré avec Visual Studio etpermet de parcourir l’ILvar ou déclaration explicite : c’est pareilvar != dynamic. Réservez dynamic à l’interop !
    18. 18. Enigme 2PLUS PLUS
    19. 19. { i++ }
    20. 20. Enigme 2 : Qu’affiche le programme ?A. 1B. 2C. Ne compile pas
    21. 21. Enigme 2 : Qu’affiche le programme ?A. 1B. 2C. Ne compile pas
    22. 22. En synthèseC# spécifie les comportements de manière détailléeC’est la fin de l’échauffement !
    23. 23. (petit) rappelCLASSES ET STRUCTURES
    24. 24. La pile (stack)
    25. 25. La pile (stack) static void Main() { FaitQqch(); FaitAutreChose(); }
    26. 26. La pile (stack) static void Main() { FaitQqch(); FaitAutreChose(); } Main
    27. 27. La pile (stack) static void Main() { FaitQqch(); FaitAutreChose(); FaitQqch } Main
    28. 28. La pile (stack) static void Main() { FaitQqch(); FaitAutreChose(); FaitAutreChose } Main
    29. 29. La pile (stack) static void Main() { FaitQqch(); FaitAutreChose(); } Main
    30. 30. Le tas (heap)
    31. 31. Le tas (heap) User utilisateur = new User();
    32. 32. Le tas (heap) User utilisateur = new User(); utilisateur.Name = "Luc"; Luc
    33. 33. Le tas (heap) DateTime lucBirth = new DateTime(1979, 11, 28); Luc 28/11 /1978
    34. 34. Le tas (heap) DateTime lucBirth = new DateTime(1979, 11, 28); utilisateur.BirthDate = lucBirth; 28/11 /1978 Luc 28/11 /1978
    35. 35. Le tas (heap) DateTime lucBirth = new DateTime(1979, 11, 28); utilisateur.BirthDate = lucBirth; 28/11 /1978 Luc 28/11 /1978
    36. 36. Enigme 3REMISE À ZÉRO
    37. 37. { Remise à Zéro }
    38. 38. Enigme 3 : Est-ce que ça compile ?A. OuiB. NonC. Ca dépend des options du compilateurD. Ca veut dire quoi « ça compile » ?
    39. 39. Enigme 3 : Est-ce que ça compile ?A. OuiB. NonC. Ca dépend des options du compilateurD. Ca veut dire quoi « ça compile » ?
    40. 40. En synthèseLe compilateur sait (assez) bien déterminer si les cheminsde construction initialisent tous les membresC’est un mécanisme fondamental du déterminisme de .NET:this() permet d’enchaîner les ctor pour les objetscomplexesthis = new peut impressionner en soirée - 40
    41. 41. (petit) rappelDANS LES COULISSES DESPROPRIÉTÉS
    42. 42. { Propriétés }
    43. 43. Enigme 4(D)ÉTONNANTE COMBINAISON
    44. 44. { (D)étonnante Combinaison }
    45. 45. Enigme 4 : Qu’affiche le programme ?A. False, FalseB. False, TrueC. False, NullReferenceExceptionD. La réponse D
    46. 46. Enigme 4 : Qu’affiche le programme ?A. False, FalseB. False, TrueC. False, NullReferenceExceptionD. La réponse D
    47. 47. En synthèsePerformance sur les objets valeurs Pas de garbage collection Pas d’indirection de pointeurLes objets valeurs sont manipulés par copie, donc Attention aux mises à jour Les copies sont consommatrices en performance et en mémoire. 10 appels imbriqués = 10 copies = 10x en RAMLa copie de valeur peut engendrer des bugs difficiles àdiagnostiquer - 47
    48. 48. PréconisationsUtilisez les structs pour des objets de petite tailleEvitez les confusions en n’ayant que des structs dont leschamps sont en lecture seule - 48
    49. 49. Enigme 5C# DANS TOUS SES ÉTATS
    50. 50. { C# dans tous ses états } yield return
    51. 51. Enigme 5 : Qu’affiche ce programmeA. Nom1, Nom2, Clement, LucB. Nom1, Clement, Nom2, LucC. Clement, LucD. Nom1, Nom2
    52. 52. Enigme 5 : Qu’affiche ce programmeA. Nom1, Nom2, Clement, LucB. Nom1, Clement, Nom2, LucC. Clement, LucD. Nom1, Nom2
    53. 53. Une machine à états ? 4 2 1 3 5 Une machine à états est un ensemble d’états n et de transitions - 53
    54. 54. Une machine à états ? public static IEnumerable<string> GetNames() { 1 Console.WriteLine("Nom 1"); yield return "Clement"; 2 Console.WriteLine("Nom 2"); yield return "Luc"; 3 } - 54
    55. 55. yield returnChaque yield return correspond à un étatLe code entre deux yield return correspond à unetransitionLe compilateur créé une classe machine à états MoveNext passe à l’état suivant L’état en cours est sauvegardé Les variables locales de la fonctions sont desmembres Chaque appel de MoveNext fait un Goto - 55
    56. 56. { C# dans tous ses états } async await
    57. 57. async awaitChaque appel à une méthode préfixée de await est un étatLe code entre deux appels est une transitionLors d’un appel à une méthode async, si après l’appel cellesi n’est pas terminée (IsCompleted = false), un « awaiter »est créé, qui rappellera la machine à état à la fin de la tâche,pour continuer à l’état courant - 57
    58. 58. En synthèseLe compilateur génère des machines à état, qui permettentd’implémenter les scénarios de « reprise »yield return et async sont des constructions bien plussophistiquées qu’elles n’en ont l’airL’intelligence et la quantité de code fournie par lecompilateur est appréciable… et permet d’être plus productif - 58
    59. 59. Enigme 6BOUQUET FINAL
    60. 60. { Bouquet final }
    61. 61. Enigme 6 : Qu’affiche ce programmeA. Alice a 10 ans, Bob a 11 ans, Charlie a 12 ans, Dave a 13 ansB. Alice a 10 ans, Alice a 10 ans, Alice a 10 ans, Alice a 10 ansC. Dave a 13 ans, Dave a 13 ans, Dave a 13 ans, Dave a 13 ansD. Ne compile pas
    62. 62. Enigme 6 : Qu’affiche ce programmeA. Alice a 10 ans, Bob a 11 ans, Charlie a 12 ans, Dave a 13 ansB. Alice a 10 ans, Alice a 10 ans, Alice a 10 ans, Alice a 10 ansC. Dave a 13 ans, Dave a 13 ans, Dave a 13 ans, Dave a 13 ansD. Ne compile pas
    63. 63. { Bouquet final } « The Encore »
    64. 64. Enigme 6 : Qu’affiche ce programmeA. Alice a 10 ans, Bob a 11 ans, Charlie a 12 ans, Dave a 13 ansB. Alice a 10 ans, Alice a 10 ans, Alice a 10 ans, Alice a 10 ansC. Dave a 13 ans, Dave a 13 ans, Dave a 13 ans, Dave a 13 ansD. Ne compile pas
    65. 65. class Main_Scope2 class Main_Scope1 { { string name;Visual Studio 2012 string messageFormat; Main_Scope1 parentScope; List<Action> actions; } }static string[] _Names = new[]{ "Alice", "Bob", "Charlie" };static void Main(string[] args){ string messageFormat = "Hello {0}"; messageFormat = "Hello {0}" List<Action> actions = new List<Action>(); actions = { } for (int i = 0; i < _Names.Length; ++i) { string name = _Names[i]; actions.Add(() => Console.WriteLine(messageFormat, name)); } parentScope parentScope parentScope foreach (var action in actions) Name = Name = Name = action(); "Alice" "Bob" "Charlie" Console.ReadLine();} Action Action Action
    66. 66. class Main_Scope1 class Main_Scope2 { { string messageFormat;Visual Studio ≤ 2010 List<Action> actions; } Main_Scope1 parentScope; string name; }static string[] _Names = new[]{ "Alice", "Bob", "Charlie" };static void Main(string[] args){ messageFormat = "Hello {0}" string messageFormat = "Hello {0}"; actions = { } List<Action> actions = new List<Action>(); name ="Charlie" string name; for (int i = 0; i < _Names.Length; ++i) { name = _Names[i]; actions.Add(() => Console.WriteLine(messageFormat, name)); } parentScope parentScope parentScope foreach (var action in actions) action(); Console.ReadLine();} Action Action Action
    67. 67. En synthèseLes closures sont un outil pratique et élégant dont lamécanique est implémentée par le compilateurLes breaking changes au niveau compilation sontextrêmement rares, et sont pris très au sérieux par Microsoft - 67
    68. 68. Conclusion
    69. 69. En synthèseLes évolutions du langage C# sont principalement liées aucompilateur lui-même, avec peu de support spécifique de laCLRParti d’une programmation purement itérative proche dulangage machine, le C# permet aujourd’hui d’exprimerélégamment des principes complexes par la génération decode Asynchronisme Closures Générateurs - 69
    70. 70. Pour finir http://notes.mstechdays.frint i = 0;Console.Write(string.Format("{0} {1} {2} {3}", ++i, i++ * ++i, i, i++ + i++));
    71. 71. Donnez votre avis ! Depuis votre smartphone, sur : http://notes.mstechdays.fr De nombreux lots à gagner toutes les heures !!! Claviers, souris et jeux Microsoft… Merci de nous aider à améliorer les TechDayshttp://notes.mstechdays.fr
    72. 72. Développeurs Pros de l’IT http://aka.ms/generation-app Formez-vous en ligne www.microsoftvirtualacademy.com http://aka.ms/evenements- developpeurs Retrouvez nos évènements http://aka.ms/itcamps-france Les accélérateurs Faites-vous accompagnerWindows Azure, Windows Phone, gratuitement Windows 8 Essayer gratuitement nos http://aka.ms/telechargements solutions IT La Dev’Team sur MSDN Retrouver nos experts L’IT Team sur TechNet http://aka.ms/devteam Microsoft http://aka.ms/itteam
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×