Si vous êtes développeur node.js vous vous confronterez tôt ou tard au développement d'addons natifs ... et à tout un lot de nouveaux problèmes : langage C++ en lui même, mais également API V8, build system ou dépendance aux versions de V8. Pourtant dès que vous avez besoins de multi-threading, d'accès aux ressources machine ou même simplement pour réutiliser des librairies existantes vous n'y coupez pas. Lors de ce talk vous découvriez comment le langage Rust grâce à Neon permet de rendre vos modules natifs "fast & safe", vous pourriez même prendre du plaisir à développer des modules natifs dorénavant
Les Langages Dédiés (DSL) au secours du Français ?Damien Fourret
Human Talk Grenoble 2017/06/13
--
Quand les règles métier d'une application sont décrites en Français, comment les intégrer dans un univers très anglophone ?
En effet l'usage de langues naturelles dans un code source donne parfois d'étrange résultats.
Dès lors, regardons si les Langages Dédiés (DSL) peuvent être une solution pour conserver un peu d'harmonie.
Comment développer un serveur métier en python/C++cppfrug
Quelles sont les problématiques d'interfaçage, les avantages/inconvénients des langages, la stratégie de code, etc. dans le développement d'un serveur métier ?
Si vous êtes développeur node.js vous vous confronterez tôt ou tard au développement d'addons natifs ... et à tout un lot de nouveaux problèmes : langage C++ en lui même, mais également API V8, build system ou dépendance aux versions de V8. Pourtant dès que vous avez besoins de multi-threading, d'accès aux ressources machine ou même simplement pour réutiliser des librairies existantes vous n'y coupez pas. Lors de ce talk vous découvriez comment le langage Rust grâce à Neon permet de rendre vos modules natifs "fast & safe", vous pourriez même prendre du plaisir à développer des modules natifs dorénavant
Les Langages Dédiés (DSL) au secours du Français ?Damien Fourret
Human Talk Grenoble 2017/06/13
--
Quand les règles métier d'une application sont décrites en Français, comment les intégrer dans un univers très anglophone ?
En effet l'usage de langues naturelles dans un code source donne parfois d'étrange résultats.
Dès lors, regardons si les Langages Dédiés (DSL) peuvent être une solution pour conserver un peu d'harmonie.
Comment développer un serveur métier en python/C++cppfrug
Quelles sont les problématiques d'interfaçage, les avantages/inconvénients des langages, la stratégie de code, etc. dans le développement d'un serveur métier ?
Javascript - Tableaux : que fait ce code ?Ruau Mickael
Ce document a été conçu et utilisé sur plusieurs sessions de formation professionnelles pour développeurs logiciels.
Il présente la syntaxe du langage javascript à usage d'un public de développeurs maîtrisant déjà un langage de développement (langage C, Java, C Sharp, PHP...).
Niveau : débutant.
Séance numéro : 2/10.
Temps nécessaire à la séance : environ 1h.
Cette séance est issue d'une série de 10 séances présentant le langage javascript (niveau débutant à confirmé).
Le niveau débutant de la série se réalise en 2 jours.
La niveau confirmé se réalise en 3 jours.
Ce programme est conforme aux titres du ministère du travail :
- Développeur Logiciel
- Concepteur Développeur Informatique
Il permet de valider les modules correspondants de ces titres RNCP (compétences développement de pages web).
La méthode utilisée mélange les approches interrogatives et actives :
- à partir d'exemples de code, faire raisonner les stagiaires par raisonnement hypothético-déductif ("que fait ce code?")
- à partir de code "à trous", faire découvrir et appliquer des éléments de syntaxe (travaux pratiques "construisons ensemble")
- à partir des problèmes rencontrés, faire rechercher des solutions possibles aux problèmes soulevés par le code "énigme" ("quelles solutions?")
- à partir de code "énigme", faire vérifier l'assimilation des connaissances ("vrai ou faux?")
Inclus :
- code à trou
- grille d'évaluation
Ce document powerpoint est également disponible en marque blanche. Nous contacter via notre compte twitter @forgelogicielle.
Ce document a été conçu et utilisé sur plusieurs sessions de formation professionnelles pour développeurs logiciels.
Il présente la syntaxe du langage javascript à usage d'un public de développeurs maîtrisant déjà un langage de développement (langage C, Java, C Sharp, PHP...).
Niveau : débutant.
Séance numéro : 4/10.
Temps nécessaire à la séance : environ 1h.
Cette séance fait partie d'une série de 10 séances présentant le langage javascript (niveau débutant à confirmé).
Le niveau débutant de la série se réalise en 2 jours.
La niveau confirmé se réalise en 3 jours.
Ce programme est conforme aux titres du ministère du travail :
- Développeur Logiciel
- Concepteur Développeur Informatique
Il permet de valider les modules correspondants de ces titres RNCP (compétences développement de pages web).
La méthode utilisée mélange les approches interrogatives et actives :
- à partir d'exemples de code, faire raisonner les stagiaires par raisonnement hypothético-déductif ("que fait ce code?")
- à partir de code "à trous", faire découvrir et appliquer des éléments de syntaxe (travaux pratiques "construisons ensemble")
- à partir des problèmes rencontrés, faire rechercher des solutions possibles aux problèmes soulevés par le code "énigme" ("quelles solutions?")
- à partir de code "énigme", faire vérifier l'assimilation des connaissances ("vrai ou faux?")
Inclus :
- code à trou
- grille d'évaluation
Ce document powerpoint est également disponible en marque blanche. Nous contacter via notre compte twitter @forgelogicielle.
Fort de ses 1.7 millions de téléchargements l'an passé, Groovy continue son bonhomme de chemin en tête parmi les langages de programmation alternatifs pour la JVM.
Groovy 2.0, sorti l'an passé, introduisait dans son offre de la modularité, le support de JDK 7 au niveau syntaxique avec "Project Coin" autant qu'au niveau JVM avec l'utilisation d'"invoke dynamic", et proposait des fonctionnalités de typage et de compilation statique.
Groovy 2.1, quant à lui, s'appuie sur ces bases pour compléter le support d'"invoke dynamic" pour plus de performances. Il propose des améliorations permettant de documenter, d'aider les IDEs, et de vérifier statiquement les Domain-Specific Languages construits avec Groovy. Vous pourrez créer des méta-annotations regroupant d'autres annotations, pour éviter l'annotation "hell". Et enfin, vous irez encore plus loin dans la customisation du compilateur !
Accrochez votre ceinture, paré au décollage !
This document provides a tutorial on creating a simple login/logout application using Grails. It discusses creating a Grails application and User controller. It describes customizing the login page view and adding a login form. It then covers creating the login action to handle form submission, adding validation, and using flash scope to display messages. The tutorial also demonstrates keeping the login status in the session, creating a logout action, and conditionally displaying the login form or logout link based on login status. Styling and other Grails resources are also briefly mentioned.
Javascript - Tableaux : que fait ce code ?Ruau Mickael
Ce document a été conçu et utilisé sur plusieurs sessions de formation professionnelles pour développeurs logiciels.
Il présente la syntaxe du langage javascript à usage d'un public de développeurs maîtrisant déjà un langage de développement (langage C, Java, C Sharp, PHP...).
Niveau : débutant.
Séance numéro : 2/10.
Temps nécessaire à la séance : environ 1h.
Cette séance est issue d'une série de 10 séances présentant le langage javascript (niveau débutant à confirmé).
Le niveau débutant de la série se réalise en 2 jours.
La niveau confirmé se réalise en 3 jours.
Ce programme est conforme aux titres du ministère du travail :
- Développeur Logiciel
- Concepteur Développeur Informatique
Il permet de valider les modules correspondants de ces titres RNCP (compétences développement de pages web).
La méthode utilisée mélange les approches interrogatives et actives :
- à partir d'exemples de code, faire raisonner les stagiaires par raisonnement hypothético-déductif ("que fait ce code?")
- à partir de code "à trous", faire découvrir et appliquer des éléments de syntaxe (travaux pratiques "construisons ensemble")
- à partir des problèmes rencontrés, faire rechercher des solutions possibles aux problèmes soulevés par le code "énigme" ("quelles solutions?")
- à partir de code "énigme", faire vérifier l'assimilation des connaissances ("vrai ou faux?")
Inclus :
- code à trou
- grille d'évaluation
Ce document powerpoint est également disponible en marque blanche. Nous contacter via notre compte twitter @forgelogicielle.
Ce document a été conçu et utilisé sur plusieurs sessions de formation professionnelles pour développeurs logiciels.
Il présente la syntaxe du langage javascript à usage d'un public de développeurs maîtrisant déjà un langage de développement (langage C, Java, C Sharp, PHP...).
Niveau : débutant.
Séance numéro : 4/10.
Temps nécessaire à la séance : environ 1h.
Cette séance fait partie d'une série de 10 séances présentant le langage javascript (niveau débutant à confirmé).
Le niveau débutant de la série se réalise en 2 jours.
La niveau confirmé se réalise en 3 jours.
Ce programme est conforme aux titres du ministère du travail :
- Développeur Logiciel
- Concepteur Développeur Informatique
Il permet de valider les modules correspondants de ces titres RNCP (compétences développement de pages web).
La méthode utilisée mélange les approches interrogatives et actives :
- à partir d'exemples de code, faire raisonner les stagiaires par raisonnement hypothético-déductif ("que fait ce code?")
- à partir de code "à trous", faire découvrir et appliquer des éléments de syntaxe (travaux pratiques "construisons ensemble")
- à partir des problèmes rencontrés, faire rechercher des solutions possibles aux problèmes soulevés par le code "énigme" ("quelles solutions?")
- à partir de code "énigme", faire vérifier l'assimilation des connaissances ("vrai ou faux?")
Inclus :
- code à trou
- grille d'évaluation
Ce document powerpoint est également disponible en marque blanche. Nous contacter via notre compte twitter @forgelogicielle.
Fort de ses 1.7 millions de téléchargements l'an passé, Groovy continue son bonhomme de chemin en tête parmi les langages de programmation alternatifs pour la JVM.
Groovy 2.0, sorti l'an passé, introduisait dans son offre de la modularité, le support de JDK 7 au niveau syntaxique avec "Project Coin" autant qu'au niveau JVM avec l'utilisation d'"invoke dynamic", et proposait des fonctionnalités de typage et de compilation statique.
Groovy 2.1, quant à lui, s'appuie sur ces bases pour compléter le support d'"invoke dynamic" pour plus de performances. Il propose des améliorations permettant de documenter, d'aider les IDEs, et de vérifier statiquement les Domain-Specific Languages construits avec Groovy. Vous pourrez créer des méta-annotations regroupant d'autres annotations, pour éviter l'annotation "hell". Et enfin, vous irez encore plus loin dans la customisation du compilateur !
Accrochez votre ceinture, paré au décollage !
This document provides a tutorial on creating a simple login/logout application using Grails. It discusses creating a Grails application and User controller. It describes customizing the login page view and adding a login form. It then covers creating the login action to handle form submission, adding validation, and using flash scope to display messages. The tutorial also demonstrates keeping the login status in the session, creating a logout action, and conditionally displaying the login form or logout link based on login status. Styling and other Grails resources are also briefly mentioned.
Introduction au langage Go, avec comparaisons à Java
Présentation donnée dans différents meetups et conférences en 2015 et 2016.
Sources : https://github.com/swallez/golang-talks/
Swift est désormais open source ! "Google considérerait Swift comme un langage « de première classe » pour Android" pouvait-on lire en avril sur le réseau. Et enfin un portage Android du langage a été "merge" dans la base de code officielle de Swift.
Bon tout ceci est un bon prétexte pour apprendre ce nouveau langage et les possibilités qu'il peut nous apporter en terme de développement. Une comparaison avec Java sera notamment proposée afin de montrer les similitudes et differences entre ces deux langages .
Le développement d'applications lourdes à base de JavaScript est désormais possible. Cependant, cela requiert de bien connaître le langage en lui-même ainsi que les meilleurs patterns et pratiques établit ces 10 dernières années à travers des frameworks comme YUI ou jQuery par exemple. Vous verrez donc ici comment bien structurer votre code, comment utiliser des approches permettant de palier à certaines limitations de JS et comment également industrialiser le code grâce à la mise en place de tests unitaires.
Ce cours concerne la manipulation des chaines de caractères et les expressions régulières. La première partie présente la classe str Python ainsi que les opérations qu'il est possible de faire sur des objets str. La seconde partie concerne les expressions regulières qui permettent de valider des chaines de caractères ou d'en extraire des sous-chaines qui satisfont un motif donné. On y voit finalement comment utiliser le module re Python.
Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27Horacio Gonzalez
Polymer par-ci, Polymer par-là, c'est bien beau de voir tout ce qu'on peut faire avec cette bibliothèque…
Mais à la base le discours qu'on nous vend depuis des années est celui des Web Components, des briques modulaires et interopérables, suivant un standard et pouvant être mélangés comme on le souhaite pour construire des webapp comme si on faisait du LEGO.
Alors, il n'est pas contradictoire de militer pour les Web Components et d'utiliser Polymer ?
Ben, pas du tout ! Polymer, surtout depuis la sortie de Polymer 2, n'est qu'une surcouche de sucre syntactique au dessus du standard Web Components, et les éléments créés avec Polymer sont bel et bien des Web Components standard.
De la même façon, il y a plein d'autres bibliothèques de Web Components qui ont un rôle semblable : SkateJS, SlimJS, BramJS... Chacune orientée vers une sensibilité et une façon de coder. Et bien entendu, les éléments créés avec eux se mélangent sans soucis, car ils suivent tous le même standard.
Dans ce talk nous allons voir comment ces éléments Polymer sont construits à partir du standard web components, voir ce côté sucre syntactique et comprendre ce qu'ils apportent. Ensuite on verra rapidement les bases de SkateJS et de SlimJS pour finir par prouver l'intéropérabilité avec une petite application qui mélange du Web Component standard, du Polymer, du SkateJS et du SlimJS.
But there is no web component for that - Web Components Remote Conference - 2...Horacio Gonzalez
This document discusses componentalizing JavaScript libraries to create web components. It provides examples of componentalizing QR code generation and scanning libraries. To componentalize a library, the author defines inputs, outputs, a template, and wires the library to these. Issues may arise that require debugging and even patching the library. The goal is to encapsulate third party code into reusable custom elements.
Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27Horacio Gonzalez
The document is a transcript of a talk given by Horacio Gonzalez and Cyril Balit on using web components across different frameworks. They discuss how they have previously talked about Polymer and web components individually. For this talk, they wanted to demonstrate using web components from different libraries (like Polymer) in various web application frameworks. They give a demo mixing web components from different libraries in applications built with different frameworks. They conclude that with web components standards, elements can be freely mixed and matched across frameworks.
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Horacio Gonzalez
The Paris Web Components Meetup proposed a session to compare several component-oriented frameworks, where each speaker made the case of his or her favorite framework and showed the implementation of the same webapp done with the chosen framework. I did the Polymer presentation.
Mixing Web Components - Best of Web Paris - 2016 06-09Horacio Gonzalez
Ah, les web components, quelle belle idée ! Du développement web basé enfin sur une vraie architecture en composants, de la réutilisation, de la modularisation, de l'encapsulation… Mais en attendant que le W3C décide de sortir le standard, ce qu'on a dans les mains c'est une panoplie de bibliothèques de polyfills : Polymer, X-Tag, Bosomic…
Dans ce talk nous allos répondre à la question : "OK, le futur sera beau, mais aujourd'hui, si je fais des composants avec une bibliothèque X et mon pote en fait avec une bibliothèque Y, je peux les utiliser dans la même application ? Et ils marcheront dans mon framework favori ?".
Polymer in the real life - Devoxx France - 2016 04-20Horacio Gonzalez
In the last two years I've been speaking a lot about web components and Polymer in conferences and user-groups, sharing a vision of the upcoming web-component revolution. But after these introductory talks I often got the same question: "that seems great... but does it works in Real Life?" Ah, the pesky real life question...
In this talk I'm going to tackle that question in the best way I know: I'm going to tell you my experience of almost two full years web applications with Polymer in the real life, for real projects in a real enterprise with real costumers, and all the lessons I've learnt from it.
You will heard why did I choose Polymer, how I dealt with the 0.x versions lifecycle, the good points and the bad ones too, how I did integrate lots of 3rd part libs into a component architecture and how now I'm able to create full fledge Progressive Web Apps using Polymer in a simple way without having to deal with the complexity of Angular/React/Whatever JS, but also how to integrate your components into those frameworks if needed.
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24 Horacio Gonzalez
This document discusses Warp 10, a software platform for collecting, storing, and analyzing sensor and IoT data. Warp 10 can ingest large amounts of time series and geo-time series data from sensors and other sources. It provides tools for storing, manipulating, and analyzing the data using the WarpScript language. Examples demonstrate how to calculate averages and find the closest fuel station using geo-time series data on fuel prices in France.
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScriptHoracio Gonzalez
The document discusses JavaScript forge tools like npm, Bower, Grunt and Yeoman that allow developers to manage dependencies, build processes, and more for front-end development. It explains that npm is used to install front-end build tools and serves as the base for building a JavaScript forge. Bower is introduced as a package manager for installing web libraries and their dependencies. The benefits of using Bower and other tools via a bower.json file to define project dependencies are also covered.
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...Horacio Gonzalez
This document provides an overview of a module on interactive web application development. It covers the following topics:
- Front-end technologies: HTML5, CSS, JavaScript, and the Polymer library for implementing web components.
- Back-end concepts: Introduction to Java EE including servlets, JSP, and frameworks like SparkJava.
- JavaScript tooling: Grunt, Gulp, Bower, and Yeoman for building JavaScript applications.
- Node.js and backend frameworks like ExpressJS for building APIs.
- Introduction to NoSQL databases like MongoDB, Redis, and Cassandra.
- Software tooling in Java.
- Test-driven development.
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQLHoracio Gonzalez
This document provides an introduction and overview of MongoDB and how to use it. Some key points:
- MongoDB is an open-source document database that provides high performance, high availability, and automatic scaling. It uses documents (similar to JSON objects) rather than tables and rows.
- Documents are stored in collections without a predefined schema. Fields can be added, modified or deleted at any time.
- Common operations include inserting, querying, updating, and removing documents from collections. Queries can use filters, projections, sorting, skips, limits, and regular expressions.
- MongoDB is flexible compared to relational databases as schemas are not rigidly defined. It is suitable for high performance applications that need
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQLHoracio Gonzalez
This document provides an introduction and overview of MongoDB and NoSQL databases. It discusses key MongoDB concepts like document databases, collections and documents. It also covers how to install and run MongoDB, insert and query data, and use common operations. Some examples show how to create indexes, use JavaScript and regex queries. Exercises at the end propose practicing installing MongoDB, creating a collection and querying data.
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScriptHoracio Gonzalez
The document discusses various JavaScript development tools including npm, Bower, Grunt, and Yeoman. It begins by explaining that npm is used to install other development tools like Bower, Grunt, and Yeoman. It then provides more details on Bower for managing front-end package dependencies, Grunt for automating tasks, and how they can be used together with a Gruntfile and package.json to set up a build system for a JavaScript project.
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...Horacio Gonzalez
This document provides an overview and description of a module on interactive web application development. It covers front-end topics like HTML5, CSS, JavaScript, and the Polymer library, as well as back-end concepts using Java EE frameworks and Node.js. The module will include sections on:
- Front-end with HTML5, CSS, JS, and the Polymer library
- Back-end concepts using Java EE for servlets, JSP, and frameworks
- Back-end using Node.js, ExpressJS, and APIs
- JavaScript build tools like Grunt, Gulp, Bower, and Yeoman
- Software development practices like test-driven development
- An examination of student
The W3C has been working on a Web Components standard for almost three years, but it is still a work in progress. But polyfills like allows current developers to use Web Components today, and incorporate to their apps widgets from any library of web components.
The best known of these libraries is Polymer, but it isn't the only one. In this talk we are going to compare Polymer, the '800 lb gorilla' in the Web Component field, with several of its lesser known competitors: Mozilla's X-Tags and Briks, and Bosonic, and even homemade ReactJS webcomponents
We will build an Angular JS application where, instead of directives, we will use webcomponents done with Polymer, X-Tag and ReactJS. And we will take a look to the performances in both Chrome and Firefox.
Mixing Web Components - Paris Web Components - 2015 09-16 Horacio Gonzalez
The W3C has been working on a Web Components standard for almost three years, but it is still a work in progress. But polyfills like allows current developers to use Web Components today, and incorporate to their apps widgets from any library of web components.
The best known of these libraries is Polymer, but it isn't the only one. In this talk we are going to compare Polymer, the '800 lb gorilla' in the Web Component field, with several of its lesser known competitors: Mozilla's X-Tags and Briks, and Bosonic, and even homemade ReactJS webcomponents
We will build an Angular JS application where, instead of directives, we will use webcomponents done with Polymer, X-Tag and ReactJS. And we will take a look to the performances in both Chrome and Firefox.
3. Origine
James Strachan to Bob McWhirter in 2003:
Wouldn’t it be “groovy” if we could have native
syntax for lists, maps and regexs in Java
like in most scripting languages?
Wouldn’t it be “groovy” if we could have
duck typing in Java?
Wouldn’t it be “groovy” if we had
closures and properties in Java?
4. Groovy
Langage de POO destiné à la plate-forme Java
● Inspiré de Python, Ruby et Smalltalk
● Syntaxe très proche de Java
● Compilé
○ soit à la volée dynamiquement
○ soit classiquement vers bytecode
5. Groovy
Langage de POO destiné à la plate-forme Java
● Typages statique et dynamique
● Support natif pour listes, maps, et
expressions régulières
● Fermetures ou clôtures (closures)
● Surcharge des opérateurs
http://groovy.codehaus.org/
6. Intégration avec Java
○ Groovy génère du bytecode Java pour la JVM
■ Same strings, same regex S
■ Same APIs — JDK, collections, 3rd party, etc.
■ Same security model, same threading model
■ Same OO concepts
○ Compilation croisée
■ Compilateur groovyc pour Java et Groovy
■ Interopérabilité et mixité parfaite
7. Objectifs de Groovy
● Faciliter la vie du développeur Java
○ Un sur-ensemble de Java
○ Très facile à apprendre
● Aussi rapide et sur que Java
○ Avec validation de typage et compilation statiques
● Expressif, concis et légible
8. Un programme en Java
public class HelloWorld {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String greet() {
return quot;Hello quot;+ name;
}
public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.setName("Groovy");
System.out.println(helloWorld.greet());
}
}
9. Un programme en Groovy
public class HelloWorld {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String greet() {
return quot;Hello quot;+ name;
}
public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.setName("Groovy");
System.out.println(helloWorld.greet());
}
}
10. Le même programme bien
récrit en Groovy
class HelloWorld {
String name
def greet() {
"Hello $name"
}
}
def helloWorld = new HelloWorld(name: "Groovy")
println helloWorld.greet()
11. Le développeur Java, déjà
un développeur Groovy
● Code Java valable
Code Groovy valable
○ Dans 90% des cas
● Courbe d'apprentissage très douce
12. Déclaration de classes
● Même aspect qu'une déclaration Java
○ Le modificateur par défaut est publique
class HelloWorld {
String name
String greet() {
"Hello $name"
}
}
13. Plein de choses optionnelles
● Les points-virgules en fin de ligntye
● Le typage des variables et méthodes
● Les mots clés return et public
● Les parenthèses dans les appels aux méthodes
14. Typage optionnel
● Possibilité d'utiliser le typage statique
○ Comme dans Java
● Possibilité d'utiliser le typage dynamique
○ en remplaçant le type par le mot clé def
● Pas besoin de def pour les paramètres formelles
○ pour les des méthodes ou closures
def helloWorld = new HelloWorld(name: "Groovy")
15. Appel aux méthodes
● Dans les appels aux méthodes avec des paramètres on
peut omettre les parenthèses
def a = "Toto"
print(a)
print a
method(a, b)
method a, b
move(from:"ici", to:"là bas")
move from:"ici", to:"là bas"
list.each({ println it })
list.each(){ println it }
list.each { println it }
16. Scripts
● Script : du code Groovy non enfermé dans
une déclaration de classe
○ Pas besoin d'une méthode main
class HelloWorld {
String name
String greet() {
"Hello $name"
}
}
def helloWorld = new HelloWorld(name: "Groovy")
println helloWorld.greet()
17. Propriétés
● Les propriétés d'une classe sont déclarées
comme attributs de la classe
○ Des getters et setters sont générés lors de la
compilation/interprétation
class Beer {
String name
String brewery
String country
double alcohol
}
19. Chaînes de caractères
● Exemples
'literal String'
'''literal
multiline String'''
def lang = 'Groovy'
"GString for $lang"
"$lang has ${lang.size()} chars"
"""multiline GString with
late eval at ${-> new Date()}"""
text = "Hello
text[0]
text[0..4]
text[0..<4]
text[-1]
text[-6..-1]
World!"
// returns "H"
// returns "Hello"
// returns "Hell"
// returns "!" (last char)
// "World!"(last 6 to last char)
20. Gammes de valeurs
● Exemples
assert (0..10).contains(5)
assert (0.0..10.0).containsWithinBounds(3.5)
for (item in 0..10) { println item }
for (item in 10..0) { println item }
(0..<10).each { println it }
21. Listes et maps
● Listes et maps sont des éléments de
première classe dans Groovy
○ Syntaxe adaptée, simplification
// Une liste vide
def a=[]
//Ajoutons des élements
a.add("toto")
a.add("titi")
//Listons les contenus
print a
//Résultat : [toto, titi]
23. Manipulation des listes
def anims = ['cat','kangaroo','koala']
assert anims[2] == 'koala'
assert anims[0..1,2] == ['cat','kangaroo','koala']
def kanims = anims[1..2]
assert anims.findAll{it =~ /k.*/} == kanims
assert anims.find{ it =~ /k.*/} == kanims[0]
assert anims.grep(~/k.*/) == kanims
assert anims.join(' ') == 'cat kangaroo koala'
anims.remove(1)
assert anims == ['cat','koala']
anims.each { println it }
Des indexes négatives indiquent la fin de la liste
def list = [0,1,2]
assert list[-1] == 2
assert list[-1..0] == list.reverse()
assert list == [list.head()] + list.tail()
24. Maps
Syntaxe semblable à celle des listes
def map = [a:0, b:1]
def empty = [:]
Pour récupérer une valeur on peut :
● mettre la clé entre crochets
● mettre la clé comme une propriété de la map
● utiliser la méthode get
assert map['a'] == 0
assert map.b == 1
map['a'] = 'x'
map.b = 'y'
assert map == [a:'x', b:'y']
assert map.c == null
assert map.get('c', 2) == 2
assert map.c == 2
25. Manipulation des maps
Des méthodes d'itération permettent de parcourir la map en
s'appliquant à chaque couple clé/valeur
map.each { entry ->
println entry.key
println entry.value
}
map.each { key, value -> println "$key $value" }
for (entry in map) {
println "$entry.key $entry.value"
}
assert map.every { it.value.size() == 1 }
assert map.any { it.key % 4 == 0 }
26. Closures (fermetures)
● Des fonctions qui capturent des références à
l'environnement dans lequel ils s'exécutent
○ Des objets de première classe en Groovy
a = [1,2,3]
a.each({ x -> println x * x })
a.each { x -> println x * x }
a.each { println it * it }
def squareIt = { println it * it }
a.each(squareIt)
a.each squareIt
28. Comment apprendre
Groovy ?
Je ne vais pas passer une heure à vos passer
des slides
● Méthode peu efficace
Tentons quelque chose de nouveau
● Approche pratique
Essayons les Groovy Koans !
Groovy Koans ? Kesaco ?
29. Koans
Une nouvelle façon d'apprendre un langage
● Des petits cas pratiques
○ Sous la forme de suites de tests unitaires
● Chaque cas orienté pour un concept
○ Et un ensemble de tests qui ne passent pas
● Objectif : réparer les tests pour qu'ils
passent
○ Et apprendre le langage en passant
Méthode d'apprentissage différente et éfficace !