« STIC:STIC I - exercice 2 (Xerneas) » : différence entre les versions
Ligne 52 : | Ligne 52 : | ||
=== Introduction à JavaScript === | === Introduction à JavaScript === | ||
Survol des éléments fondamentaux du langage : | |||
* Syntaxe : règles pour écrire/organiser le code source | |||
** Variables : <code>var cours = "STIC I";</code> | |||
** Types de données : (1) primitives (i.e. string, number, boolean, null, undefined); (2) objects (objects, arrays, functions) | |||
** Opérateurs : (1) mathématiques (+, -, /, *, %), (2) logiques (&&, ||, ==, !=, ..), (3) autres (...) | |||
** Structure de contrôle (if... else if... else, switch) | |||
** Boucles (for, while) | |||
** Built-in objects (String, Math, Number, ...) -> properties (i.e. variables) & methods (i.e. functions) | |||
* Instructions | |||
*# Expressions : éléments individuels du langage, e.g. <code>var</code>, <code>+</code>, <code>.</code>, ... | |||
*# Statements : composition d'expressions, e.g. <code>var cours = "STIC" + " I";</code> | |||
*# Bloc de code : composition de statements qui partagent le même scope, e.g. <code>function () { ... }</code> | |||
* Deux types d'instructions : | |||
*# Modifier l'état de la logique de l'application (i.e. "write") | |||
*# Récupérer le résultat d'une manipulation/l'état d'un élément à un moment donné dans la logique de l'application (i.e. "read") | |||
Références : | |||
* [[Tutoriel JavaScript de base]] | |||
==== Exemple analysé ==== | |||
'''Problème''' : je veux obtenir l'inverse d'un mot. E.g. STIC --> CITS | |||
Démarche : | |||
# Avec quelle type de données on a à faire ? Une suite de caractère --> String | |||
# Existe-t-il une fonctionnalité du langage qui fait ce que je veux ? | |||
#* Contrôler la [http://www.w3schools.com/jsref/jsref_obj_string.asp liste des propriétés/méthodes associés aux String] | |||
#* Il n'y a rien qui fait exactement ce dont j'ai besoin | |||
# Existe-t-il quelque chose qui pourrait être utile ? | |||
#* La méthode <code>split()</code> sépare une suite de caractère et en fait une liste indexée, i.e. un array ([http://www.w3schools.com/jsref/jsref_split.asp référence]) | |||
#* Donc je peux passer de "STIC" à ["S", "T", "I", "C"] | |||
# Maintenant je me retrouve avec un array. Existe-t-il une fonctionnalité du langage qui permet d'inverser un array? | |||
#* Contrôler la [http://www.w3schools.com/jsref/jsref_obj_array.asp liste des propriétés/méthode associés aux Array] | |||
#* La méthode <code>reverse()</code> s'occupe exactement de cela ([http://www.w3schools.com/jsref/jsref_reverse.asp référence]) | |||
#* Donc je peux passer de ["S", "T", "I", "C"] à ["C", "I", "T", "S"] | |||
# Maintenant je me retrouve avec un array qui a les lettres dans le bon ordre. Existe-t-il une fonctionnalité du langage qui permet de passer d'un Array à un String? | |||
#* Contrôler à nouveau la liste des propriétés/méthodes associés aux Array (vour plus haut) | |||
#* La méthode <code>join()</code> s'occupe exactement de cela ([http://www.w3schools.com/jsref/jsref_join.asp référence]) | |||
#* Donc je peux passer de ["C", "I", "T", "S"] à "CITS" | |||
# Résolution du problème | |||
Même passage en code : | |||
<source lang="JavaScript"> | |||
//Déclarer une variable avec le mot que je veux inverser | |||
var init= "STIC"; //--> "STIC" | |||
//Commencer par le traduir en array | |||
var singleLetters = init.split(""); //--> ["S", "T", "I", "C"] | |||
//Inverser l'ordre des éléments | |||
var reverseLetters = singleLetters.reverse(); //--> ["C", "I", "T", "S"] | |||
//Unire les lettres dans l'ordre inverse | |||
var end = reverseLetters.join(""); //--> "CITS" | |||
</source> | |||
Dans cet exemple de code on a utilisé beaucoup de variables qui en fait ne servent pas. Donc on peut améliorer le code (i.e. faire du '''refactoring''') : | |||
<source lang="JavaScript"> | |||
var init = "STIC"; //--> "STIC" | |||
var end = init.split("").reverse().join(""); //--> "CITS"; | |||
</source> | |||
À ce point on a un meilleur algorithme, mais si on voulait connaître l'inverse de "ERGO", il faudrait écrire à nouveau les mêmes passages juste avec une nouvelle valeur associée à la variable init. On peut faire mieux, on peut créer une '''fonction''' : | |||
<source lang="JavaScript"> | |||
//Déclarer une fonction avec un argument. Ce sera le mot initial | |||
function reverseWord(init) { | |||
//Renvoyer le mot inversée en utilisant l'aglorithme que nous avons créé | |||
return init.split("").reverse().join(""); | |||
} | |||
//Maintenant il sera suffisant d'invoquer cette fonction et lui passer le mot en tant qu'argument pour obtenir l'inverse | |||
var sticReverse = reverseWord("Sciences et Technologies de l’Information et de la Communication"); | |||
var ergoReverse = reverseWord("Design centré utilisateur et ergonomie"); | |||
</source> | |||
==== Workshop ==== | |||
Workshop files from GitHub : | |||
* https://github.com/MALTT-STIC/stic-1-javascript-essentials | |||
== Projet 2 / Tâche == | == Projet 2 / Tâche == |
Version du 14 septembre 2017 à 10:23
Introduction
Ce deuxième exercice du cours STIC I introduit les premiers concepts de programmation et computational thinking à travers la création d'une première application interactive avec Scratch, un logiciel développé par le MIT.
Connaissances/compétences envisagées
À l'issue de cet exercice vous devez avoir acquis les connaissances/compétences suivantes :
- Développer une perspective critique sur la pensée computationnelle et le rôle de l'informatique à l'école
- Comprendre les grands principes de la programmation (variables, structures de contrôles, boucles, ...)
- Comprendre les grands principes des applications interactives et savoir identifier des liens potentiels avec l'apprentissage
- Utilisation de Scratch en tant qu'outil de développement, mais également de transfert de connaissance sur la programmation
Prérequis
Lecture obligatoire :
Activité en salle de classe
Programme
- 09:00 - 10:00 Présentation du cours
- 10:00 - 10:30 Hands-on Scratch + explication de l'exercice
- -- Pause --
- 11:00 - 12:30 Introduction à JavaScript
Présentation du cours
Thématiques
Introduction à STIC I :
- Perspective du cours
- Pensée Computationnelle (Computational Thinking)
- Interactivité/Interaction et apprentissage
Support
Support utilisé :
Hands-on Scratch
Showcase :
- Enseignement de l'informatique à l'école / Catégorie:Education au numérique
- Présentation de Scratch 2.0
Introduction à JavaScript
Survol des éléments fondamentaux du langage :
- Syntaxe : règles pour écrire/organiser le code source
- Variables :
var cours = "STIC I";
- Types de données : (1) primitives (i.e. string, number, boolean, null, undefined); (2) objects (objects, arrays, functions)
- Opérateurs : (1) mathématiques (+, -, /, *, %), (2) logiques (&&, ||, ==, !=, ..), (3) autres (...)
- Structure de contrôle (if... else if... else, switch)
- Boucles (for, while)
- Built-in objects (String, Math, Number, ...) -> properties (i.e. variables) & methods (i.e. functions)
- Variables :
- Instructions
- Expressions : éléments individuels du langage, e.g.
var
,+
,.
, ... - Statements : composition d'expressions, e.g.
var cours = "STIC" + " I";
- Bloc de code : composition de statements qui partagent le même scope, e.g.
function () { ... }
- Expressions : éléments individuels du langage, e.g.
- Deux types d'instructions :
- Modifier l'état de la logique de l'application (i.e. "write")
- Récupérer le résultat d'une manipulation/l'état d'un élément à un moment donné dans la logique de l'application (i.e. "read")
Références :
Exemple analysé
Problème : je veux obtenir l'inverse d'un mot. E.g. STIC --> CITS
Démarche :
- Avec quelle type de données on a à faire ? Une suite de caractère --> String
- Existe-t-il une fonctionnalité du langage qui fait ce que je veux ?
- Contrôler la liste des propriétés/méthodes associés aux String
- Il n'y a rien qui fait exactement ce dont j'ai besoin
- Existe-t-il quelque chose qui pourrait être utile ?
- La méthode
split()
sépare une suite de caractère et en fait une liste indexée, i.e. un array (référence) - Donc je peux passer de "STIC" à ["S", "T", "I", "C"]
- La méthode
- Maintenant je me retrouve avec un array. Existe-t-il une fonctionnalité du langage qui permet d'inverser un array?
- Contrôler la liste des propriétés/méthode associés aux Array
- La méthode
reverse()
s'occupe exactement de cela (référence) - Donc je peux passer de ["S", "T", "I", "C"] à ["C", "I", "T", "S"]
- Maintenant je me retrouve avec un array qui a les lettres dans le bon ordre. Existe-t-il une fonctionnalité du langage qui permet de passer d'un Array à un String?
- Contrôler à nouveau la liste des propriétés/méthodes associés aux Array (vour plus haut)
- La méthode
join()
s'occupe exactement de cela (référence) - Donc je peux passer de ["C", "I", "T", "S"] à "CITS"
- Résolution du problème
Même passage en code :
//Déclarer une variable avec le mot que je veux inverser
var init= "STIC"; //--> "STIC"
//Commencer par le traduir en array
var singleLetters = init.split(""); //--> ["S", "T", "I", "C"]
//Inverser l'ordre des éléments
var reverseLetters = singleLetters.reverse(); //--> ["C", "I", "T", "S"]
//Unire les lettres dans l'ordre inverse
var end = reverseLetters.join(""); //--> "CITS"
Dans cet exemple de code on a utilisé beaucoup de variables qui en fait ne servent pas. Donc on peut améliorer le code (i.e. faire du refactoring) :
var init = "STIC"; //--> "STIC"
var end = init.split("").reverse().join(""); //--> "CITS";
À ce point on a un meilleur algorithme, mais si on voulait connaître l'inverse de "ERGO", il faudrait écrire à nouveau les mêmes passages juste avec une nouvelle valeur associée à la variable init. On peut faire mieux, on peut créer une fonction :
//Déclarer une fonction avec un argument. Ce sera le mot initial
function reverseWord(init) {
//Renvoyer le mot inversée en utilisant l'aglorithme que nous avons créé
return init.split("").reverse().join("");
}
//Maintenant il sera suffisant d'invoquer cette fonction et lui passer le mot en tant qu'argument pour obtenir l'inverse
var sticReverse = reverseWord("Sciences et Technologies de l’Information et de la Communication");
var ergoReverse = reverseWord("Design centré utilisateur et ergonomie");
Workshop
Workshop files from GitHub :