{"id":774,"date":"2011-03-25T11:04:52","date_gmt":"2011-03-25T10:04:52","guid":{"rendered":"http:\/\/www.alpesjug.fr\/?p=774"},"modified":"2011-10-19T12:54:28","modified_gmt":"2011-10-19T11:54:28","slug":"scala-slides-et-compte-rendu","status":"publish","type":"post","link":"https:\/\/www.alpesjug.fr\/?p=774","title":{"rendered":"Scala : slides et compte rendu"},"content":{"rendered":"<p>Nous avons la chance de recevoir lundi dernier <a href=\"http:\/\/days2010.scala-lang.org\/node\/138\/140\">Aleksandar Prokopec<\/a> qui travaille sur les collections Scala avec <a href=\"http:\/\/lamp.epfl.ch\/~odersky\/\">Martin Odersk<\/a>, le cr\u00e9ateur du langage.<\/p>\n<div id=\"attachment_786\" style=\"width: 310px\" class=\"wp-caption alignright\"><a href=\"http:\/\/www.alpesjug.fr\/wp-content\/uploads\/2011\/03\/LP0_8739.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-786\" class=\"size-medium wp-image-786\" title=\"Aleksandar Prokopec\" src=\"http:\/\/www.alpesjug.fr\/wp-content\/uploads\/2011\/03\/LP0_8739-300x199.jpg\" alt=\"Aleksandar Prokopec\" width=\"300\" height=\"199\" srcset=\"https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2011\/03\/LP0_8739-300x199.jpg 300w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2011\/03\/LP0_8739-1024x680.jpg 1024w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2011\/03\/LP0_8739-150x99.jpg 150w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2011\/03\/LP0_8739-400x265.jpg 400w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2011\/03\/LP0_8739.jpg 1280w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-786\" class=\"wp-caption-text\">Aleksandar Prokopec<\/p><\/div>\n<p>Ce f\u00fbt une pr\u00e9sentation tr\u00e8s dense du langage.\u00a0Si on devait pr\u00e9senter Scala en quelques points cl\u00e9s :<\/p>\n<ul>\n<li>Un langage statiquement typ\u00e9, avec un support puissant de l&rsquo;inf\u00e9rence de type<\/li>\n<li>Con\u00e7u pour tourner sur une JVM et compatible avec toutes les librairies Java<\/li>\n<li>Un langage orient\u00e9 <strong>objet <\/strong>: tout est objet (pas de types primitifs, les op\u00e9rateurs sont des m\u00e9thodes&#8230;)<\/li>\n<li>Egalement un langage <strong>fonctionnel<\/strong>. Le langage ne privil\u00e9gie aucune des deux approches, il r\u00e9unit la puissance des deux paradigmes.<\/li>\n<\/ul>\n<p>Scala permet d&rsquo;\u00e9crire des programmes performants en un minimum de lignes de code,\u00a0gr\u00e2ce\u00a0\u00e0 l&rsquo;approche\u00a0fonctionnelle.<br \/>\nDans la tour de Babel des langages de programmation, Scala essaye d&rsquo;unifier les concepts (pour les lier dans les t\u00e9n\u00e8bres ? \ud83d\ude09 )<br \/>\nAleksandar nous a montr\u00e9 un grand nombre d&rsquo;aspects du langage comme les<strong> Collections\u00a0mutables\u00a0ou\u00a0immutables <\/strong>ou encore\u00a0les <strong><a href=\"http:\/\/www.scala-lang.org\/node\/126\">traits <\/a><\/strong>(un concept entre les interfaces et les classes abstraites de Java). Mais nous sommes all\u00e9s encore plus loin jusqu&rsquo;aux aspects transactionnels en m\u00e9moire (avec les blocs <em>atomic<\/em>) ou<br \/>\nl&rsquo;utilisation des <em><a href=\"http:\/\/www.scala-lang.org\/node\/114\">implicit<\/a><\/em>.<\/p>\n<p>L\u00e0 o\u00f9 on serait obliger d&rsquo;\u00e9crire un tas de boucles en Java, on peut \u00e9crire ce genre de code avec Scala :<\/p>\n<pre>      \r\n      \/\/d\u00e9claration d'une liste d'entiers\r\n      var numbers = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)\r\n\r\n      \/\/filtrage de la liste : on ne veut que les entiers pairs\r\n      var evenNumbers = numbers.filter(x=&gt;x%2==0)\r\n      \r\n      \/\/on ajoute 1 \u00e0 chaque \u00e9l\u00e9ment\r\n      var oddNumbers = evenNumbers.map(_+1)\r\n\r\n      \/\/affichage du r\u00e9sultat\r\n      oddNumbers.foreach(println(_))\r\n<\/pre>\n<p>Le compilateur est capable de deviner le type dans la plupart des cas. Ici il est clair que evenNumbers est une liste d&rsquo;entiers.<\/p>\n<p>Le caract\u00e8re <strong>_<\/strong> est une sorte de caract\u00e8re joker, le compilateur scala est assez intelligent pour le remplacer par la valeur appropri\u00e9e.<br \/>\nevenNumbers.map(_+1)  est par exemple \u00e9quivalent \u00e0 evenNumbers.map(x=&gt;x+1)<\/p>\n<p>Cette approche fonctionnelle permet aussi une am\u00e9lioration des performances. L\u00e0 on en Java on serait oblig\u00e9 de faire un code s\u00e9quentiel avec des boucles, on laisse \u00e0 Scala le choix de l&rsquo;impl\u00e9mentation d&rsquo;une fonction .\u00a0Il est alors possible d&rsquo;utiliser, par exemple, la programmation\u00a0concurrente\u00a0pour\u00a0acc\u00e9l\u00e9rer\u00a0le traitement de la fonction filter en profitant des architectures multi-coeurs. Aleksandar travaille justement sur la parall\u00e9lisation des t\u00e2ches pour les collections Scala.<\/p>\n<p>Il existe d&rsquo;autres notions encore plus puissantes comme le <strong>pattern matching<\/strong> ou les <strong>streams<\/strong>, je vous laisse d\u00e9couvrir tout \u00e7a dans les slides :<\/p>\n<div id=\"__ss_7383515\" style=\"width: 425px;\"><strong><a title=\"Scala presentation by Aleksandar Prokopec\" href=\"http:\/\/www.slideshare.net\/loicd\/scala-presentation-by-aleksandar-prokopec\">Scala presentation by Aleksandar Prokopec<\/a><\/strong><object id=\"__sse7383515\" classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" width=\"425\" height=\"355\" codebase=\"http:\/\/download.macromedia.com\/pub\/shockwave\/cabs\/flash\/swflash.cab#version=6,0,40,0\"><param name=\"allowFullScreen\" value=\"true\" \/><param name=\"allowScriptAccess\" value=\"always\" \/><param name=\"src\" value=\"http:\/\/static.slidesharecdn.com\/swf\/ssplayer2.swf?doc=scalaintro-110325041433-phpapp01&amp;stripped_title=scala-presentation-by-aleksandar-prokopec&amp;userName=loicd\" \/><param name=\"name\" value=\"__sse7383515\" \/><param name=\"allowfullscreen\" value=\"true\" \/><embed id=\"__sse7383515\" type=\"application\/x-shockwave-flash\" width=\"425\" height=\"355\" src=\"http:\/\/static.slidesharecdn.com\/swf\/ssplayer2.swf?doc=scalaintro-110325041433-phpapp01&amp;stripped_title=scala-presentation-by-aleksandar-prokopec&amp;userName=loicd\" name=\"__sse7383515\" allowscriptaccess=\"always\" allowfullscreen=\"true\"><\/embed><\/object><\/div>\n<p><a href=\"http:\/\/www.alpesjug.fr\/wp-content\/uploads\/2011\/03\/LP0_8737.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-medium wp-image-787\" title=\"Scala runs on the JVM\" src=\"http:\/\/www.alpesjug.fr\/wp-content\/uploads\/2011\/03\/LP0_8737-300x199.jpg\" alt=\"Scala runs on the JVM\" width=\"300\" height=\"199\" srcset=\"https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2011\/03\/LP0_8737-300x199.jpg 300w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2011\/03\/LP0_8737-1024x680.jpg 1024w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2011\/03\/LP0_8737-150x99.jpg 150w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2011\/03\/LP0_8737-400x265.jpg 400w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2011\/03\/LP0_8737.jpg 1280w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<div>Scala a la r\u00e9putation d\u2019\u00eatre un langage complexe. Alors, verdict ?<\/div>\n<div>Le code plus concis permet une meilleure lisibilit\u00e9. Donc potentiellement une meilleure maintenabilit\u00e9.<br \/>\nIl est effectivement possible de faire des choses difficilement compr\u00e9hensibles pour les n\u00e9ophites. Mais c\u2019est finalement le cas de la plupart des langages fonctionnels.<\/div>\n<div>Une fois les concepts de la programmation fonctionnelle assimil\u00e9s, le gain est r\u00e9el.\u00a0En respectant des normes de codage (que l&rsquo;on peut fixer au sein d&rsquo;une \u00e9quipe) \u00a0et en faisant un peu attention, je suis certain qu\u2019il est tout \u00e0 fait possible d&rsquo;\u00e9crire du code plus lisible et maintenable qu\u2019avec Java.<\/div>\n<div><strong>Et vous qu&rsquo;en pensez vous?<\/strong><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Nous avons la chance de recevoir lundi dernier <a href=\"http:\/\/days2010.scala-lang.org\/node\/138\/140\">Aleksandar Prokopec<\/a> qui travaille sur les collections Scala avec <a href=\"http:\/\/lamp.epfl.ch\/~odersky\/\">Martin Odersk<\/a>, le cr\u00e9ateur du langage.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15,18],"tags":[20,366,11],"class_list":["post-774","post","type-post","status-publish","format-standard","hentry","category-compte-rendu","category-slides","tag-scala","tag-slides","tag-soiree"],"_links":{"self":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts\/774","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=774"}],"version-history":[{"count":18,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts\/774\/revisions"}],"predecessor-version":[{"id":783,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts\/774\/revisions\/783"}],"wp:attachment":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=774"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=774"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=774"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}