Source: Scratch Wiki en français
Sur Scratch, une variable cloud (aussi parfois appelée "variable nuage" en français) est un type de variable pouvant garder sa valeur grâce à un serveur.
On peut distinguer une variable cloud d'une variable globale ou locale grâce à une icône de nuage précédant son nom.
Différence entre les variables globales / locales et les variables cloud
Variables globales / locales
Les variables globales et locales servent à stocker temporairement des lettres et des chiffres durant toute la durée du projet. Sa valeur peut-être modifiée au cours du temps grâce aux blocs adéquats mais elle "perdra" sa valeur lorsque le projet sera arrêté ou relancé. Elle reprendra donc sa valeur par défaut (celle qu'elle contenait lorsque le créateur du projet l'a sauvegardé pour la dernière fois, où la valeur donnée par un bloc d'assignation de valeur au lancement du projet, si celui-ci en contient un) lors du prochain lancement du projet.
Variables cloud
Similarités :
- Elles peuvent, comme les variables globales changer de valeur au cours du temps.
Différences :
- Les variables cloud ne peuvent stocker uniquement que des chiffres.
- Les variables cloud ont une valeur d'une longueur limitée à 256 chiffres.
- Lorsque la valeur de la variable est modifiée, elle le sera également pour toutes les personnes utilisant le projet au même moment. La variable peut donc être modifié par un utilisateur "à distance" pour tous les autres utilisateurs.
- La variable cloud prendra comme valeur au lancement du projet celle qu'elle avait lorsque la dernière personne ayant été sur le projet a quitté le projet.
- On ne peut crėer que 10 variables serveurs normalement dans un projet.
Utiliser une variable cloud
Les caractéristiques particulières des variables cloud permettent aux Scratcheurs les maîtrisant de réaliser des projets avec des mécaniques plus avancées.
Il est alors possible de réaliser, entre autre, des jeux multijoueurs en ligne, un système de sauvegarde du meilleur score sur le projet, une liste des derniers utilisateurs ayant visité le projet, etc… Les possibilités sont donc multiples.
Concernant leur utilisation (lecture et modification de leur valeur), elle s'effectue de la même façon qu'une variable locale / globale, avec les blocs mettre [☁ variable cloud v] à (0)
, ajouter (1) à [☁ variable cloud v]::variables
et (☁ variable cloud)
.
Variables cloud et Stocker des lettres et autres caractères spéciaux
Une des contraintes des variables cloud est le fait de n'accepter que des chiffres.
Pour pouvoir stocker des données telles que des lettres et autres caractères spéciaux, quelques techniques peuvent êtres employées pour y parvenir.
Convertir chaque lettre en chiffre
Une de ces techniques est d'attribuer une valeur numérique (un nombre) à chaque caractère du texte à stocker. Ces nombres seraient alors mis bout-à-bout pour former un grand nombre, qui lui sera stocké.
Par exemple, nous voulons pouvoir stocker tous les caractères de 0 à 9, de a à z (en minuscule), de A à Z (en majuscule) et quelques caractères spéciaux (tels que " " (espace), "." (point), "," (virgule), ";" (point virgule), "'" (apostrophe), """ (guillemet), "+" (plus), "-" (moins), "*" (fois), "/" (divisé) et "_" (tirait du bas)).
Nous comptons qu'il nous faut donc 73 nombres différents (10 chiffres + 26 lettre minuscules + 26 lettres majuscules + 11 caractères spéciaux).
Pour pouvoir encoder et décoder tous ces symboles plus facilement, nous utiliseront des nombres d'une même longueur. Une longueur de 2 chiffres par nombre convient parfaitement à la situation, puisque nous comptons en base 10 (notre système de comptage utilise 10 chiffres, de 0 à 9, et non 2 comme en binaire avec le 0 et le 1). Deux chiffres en base 10 nous donnent donc 100 combinaisons possibles (10 possibilités pour le premier chiffres et 10 possibilités pour le deuxième chiffre, soit 10 x 10 possibilités, soit 10²), soit 100 caractères différents à stocker, or nous n'en avons besoin que de 73 dans cet exemple; il reste donc une vingtaine de nombre disponibles pour encoder plus de caractères spéciaux.
Il n'y a plus qu'à attribuer un nombre à chaque caractère. Dans cet exemple, le caractère "1" aura correspondra au nombre 01, "2" au nombre 02, "a" au nombre 11, "b" au nombre 12, etc...
Encoder et décoder les variable cloud
Tutoriels plus détaillés
Le Scratch Wiki propose une série de tutoriels plus détaillés pour certaines utilisations plus précises des variables cloud, tels que :
Listes Cloud
Introduction
Nombreuses sont les personnes qui demandent la création sur Scratch de "listes cloud", l'équivalent des variables cloud. Cela à toujours été refusé, au motif que cela prend trop de place. Il est cependant possible d'en créer une en se basant sur les variables cloud.
Variables cloud
Voici quelques principes des variables cloud nécessaires pour la création de notre liste cloud. Les variables cloud possèdent trois limites, en raison du coût d'entretien des serveurs où sont stockées les variables cloud:
- On peut avoir sur 1 projet au maximum 10 variables cloud
- On peut stocker au maximum 256 caractères sur une variable cloud
- On ne peut stocker que des chiffres (0;1;2;3;4;5;6;7;8;9), ainsi que deux signes (- et .)
Listes
Les listes permettent de stocker un nombre illimité d'éléments. Elles n'existent pas dans tous les autres langages de programmation, mais ont été ajoutées à Scratch pour simplifier son utilisation.Vous pouvez trouver un article sur les listes à en cherchant "blocs de donnée" dans la barre de recherche du wiki.
Chiffrer et déchiffrer
Principe
Nous allons donc maintenant apprendre à chiffrer un texte, en raison de la contrainte des variables cloud. Il faut donc établir un code associant un nombre à un caractère.
Par exemple, nous voulons pouvoir stocker tous les caractères de 0 à 9, de a à z (en minuscule), de A à Z (en majuscule) et quelques caractères spéciaux (tels que " " (espace), "." (point), "," (virgule), ";" (point virgule), "'" (apostrophe), """ (guillemet), "+" (plus), "-" (moins), "*" (fois), "/" (divisé) et "_" (tiret du bas)). Nous comptons qu'il nous faut donc 73 nombres différents (10 chiffres + 26 lettre minuscules + 26 lettres majuscules + 11 caractères spéciaux).
Programme
Nous allons maintenant nous atteler à la pratique.
Il faut commencer par créer une liste que nous allons appeler "ALPHABET", où nous allons mettre tous les éléments listés ci-dessus dans le bon ordre.
Élément de séparation
Principe
Nous allons maintenant voir comment stocker une liste dans une variable. Il faut choisir un élément de séparation, quand le programme le rencontrera, il devra passer à l'élément suivant.
Nous allons donc choisir comme séparateur 99. Le programme analysera comme ci-dessus, mais il rajoutera ses éléments à une liste, et quand il rencontrera 99, il ouvrira un nouvel élément.
Programme
Nous allons maintenant nous atteler à la pratique. Vous y trouverez toutes les informations nécessaires.
Comment dépasser les limites des listes cloud
Principe
Les listes cloud ont les mêmes limites que les variables cloud. Il faut donc trouver une façon d'agrandir les listes cloud.
Coller les variables cloud
Principe
Coller les variables cloud consiste à les considérer comme une seule variable, ce qui permet d'avoir une variable de 2560 caractères.
Programme
Nous allons maintenant passer à la partie pratique. Ce programme divise 1 variable en 5 variables cloud, ce qui lui permet d'atteindre une capacité de 1280 caractères.
2 listes
Principe
Une liste simple possède 2 propriétés qui nous intéressent:
- Elles sont quasiment infinies (200 000 éléments maximum)
- Quand vous, le propriétaire du projet, ajoutez un élément à une liste, il s'enregistre et ne s'efface pas à la réinitialisation du projet.
Vous pouvez donc, quand votre liste cloud est remplie, la décharger dans une autre liste manuellement, afin qu'elle s'enregistre.
Programme
Il faut que vous vous créiez une deuxième liste. De plus, vous devrez rajouter à votre projet un programme qui compte la longueur de votre variable cloud s'occupant de la liste cloud, et, quand il commence à atteindre ses limites, vous prévenir quand vous lancez le projet.