N.B. Il s'agit d'une première version (la partie Annexes n'est pas terminée, le code PHP n'est pas là...)
La programmation est une discipline qui consiste à écrire des instructions pour un ordinateur afin de lui donner des directives précises.
Tous les exemples de codes ont été testés dans chaque langage !
Chaque langage de programmation utilise des instructions spécifiques pour décrire les actions à effectuer par le programme. Ces instructions sont toutes en anglais qui est, de fait, la langue utilisée pour quasiment tous les langages de programmation.
La syntaxe (l'enchainement des instructions...) est propre à chaque langage mais comme la logique sous-jacente est quasiment la même d'un langage à un autre, il n'est pas difficile du tout de passer d'un langage à un autre. Un programmeur professionnel changera plusieurs fois de langage dans sa carrière de toute façon (ou en utilisera plusieurs à la fois).
L'on peut écrire des commentaires dans son code (il faut le faire !) pour en faciliter la compréhension. Ces commentaires seront ignorés par le langage/
On peut écrire un commentaire seul sur une ligne ou après des instructions sur la même ligne.
N.B. Il existe aussi, dans certains langages, des commentaires sur plusieurs lignes avec une autre syntaxe.
# Ceci est un commentaire sur une seule ligne
// Ceci est un commentaire sur une seule ligne
<!-- Ceci est un commentaire -->
Le html (Hypertext Markup Language : Language d'hypertexte, c'est à dire de texte avec des liens) est le langage dans lequel sont écrits les pages internet. Ce n'est pas un langage de programmation mais un langage de description des pages (un peu comme un codage pour un traitement de texte). Le Javascript est le langage de programmation associé pour exécuter des programmes dans le navigateur (Firefox, Chrome...). C'est le navigateur qui lance les programmes en javascript sur l'ordinateur ou smartphone de l'utilisateur.
De plus, il y a aussi le langage CSS (Cascading Style Sheets : Feuilles de Styles en Cascade) qui est associé au html pour décrire la mise en forme des éléments.
Le code Javascript ou CSS peut se trouver dans les fichiers html ou dans des fichiers à part qui sont chargés dans le navigateur au lancement d'une page internet.
On peut décrire des constantes comme des valeurs auxquelles on fait référence par leur nom ou comme des variables dont la valeur ne change jamais.
Elles sont utilisées par soucis de clarification de la compréhension d'un programme à sa lecture et pour pouvoir changer une valeur lors de la phase de développement sans avoir à chercher partout où elle est utilisée.
Par convention, les constantes sont écrites en majuscules.
Les conventions de programmation sont des rècles qui n'interviennent pas dans le fonctionnement du programme (si elles ne sont pas respectées cela ne change rien à son fonctionnement) mais qui facilitent la lecture et la compréhension du code par les développeurs.
On ne peut pas déclarer de constantes en Python à proprement parler, c'est à dire que ce n'est pas prévu dans le langage.
Quand on n'a besoin d'une constante, on déclare une variable en majuscules pour indiquer aux développeurs qu'il s'agit d'une constante et de ne pas en changer sa valeur : il s'agit d'une convention, c'est à dire que si vous essayer de changer la valeur d'une constante, cela ne génèrera aucune erreur (contrairement aux langages qui prennent en charge la notion de constantes en interne).
UNECONSTANTE = 10 # On peut changer sa valeur après mais on ne doit pas le faire !
const UNECONSTANTE = 10
Godot "devine" qu'il s'agit d'un entier. Si l'on veut, par exemple, qu'il s'agisse d'un flottant, on peut écrire :
const UNECONSTANTE = 10.0
ou
const UNECONSTANTE : float = 10
Bien sur, si on écrit :
const UNECONSTANTE : float = 10.0
Cela fonctionnera aussi !
Il suffit de rajouter le mot-clef final devant la déclaration d'une variable pour que sa valeur ne puisse être modifiée par la suite
final int UNECONSTANTE = 10;
static final int UNECONSTANTE = uneInstanceDunObjet;
N.B. La syntaxe de Java peut paraître au premier abord un peu compliquée par rapport à d'autres langages. Cela provient du fait que ce langage est particulièrement bien adapté pour créer des projets très importants avec de nombreux programmeurs différents. C'est pourquoi, sa syntaxe comporte des subtilités supplémentaires par rapport à d'autres langages.
Cependant, l'on peut très bien l'utiliser aussi pour des petits projets. Cela n'a rien d'insurmontable : on n'est pas obligé d'absolument tout comprendre pour s'en servir !
const UNECONSTANTE = 10;
Javascript est un langage typé dynamiquement (voir plus loin). Il n'y a donc jamais besoin d'indiquer de quel type (entier ou flottant par exemple) est une constante (ou une variable), ce qui comporte des avantages et des inconvénients (dont il sera question un peu plus loin).
Les variables sont des espaces de stockage dans la mémoire d’un ordinateur, utilisés pour contenir des valeurs telles que des nombres, du texte ou d’autres types de données. Elles permettent aux programmeurs de manipuler et d’accéder à ces valeurs tout au long du programme.
Le nom de la variable que l'on va utiliser à la place de sa valeur dans le code
Si truc est une variable de type Entier qui contient 5. Sa "valeur" est 5 !
Cela correspond à la portion de code où elle est accessible. Si une variable est déclarée au tout début du programme, par exemple, elle pourra être utilisée dans tout le programme. En revanche, si elle est déclarée dans une boucle (voir plus loin), elle n'existera qu'à l'intérieur de celle-ci.
Python et Javascript, par exemple, sont des langages faiblement typés. Bien sur, les types de variables existent dans tous les langages mais ici une variable peut changer de type en cours de route (uneVariable = "Bonjour" puis uneVariable=10.23 sans déclanchement d'erreur). Non sseulement la valeur de la variable peut changer mais son type aussi.
L'avantage est que cela simplifie l'écriture car l'on n'a pas besoin de préciser le type de la variable à sa création.
L'inconvénient est que c'est une source d'erreurs de programmation.
En effet, dans la pratique, il est rarissime que l'on ait besoin de changer le type d'une variable dans un programme. Lorsque ça arrive, c'est très souvent une erreur du développeur.
Dans un langage fortement typé comme Java par exemple, un changement de type renvoie une erreur ce qui permet de les trouver bien plus facilement.
Précision dans chaque langage
nom = "François" # création de la variable
nom = 227 # ne génère pas d'erreur !
var nom = "François" # création de la variable
nom = 227 # ne génère pas d'erreur !
var nom : String = "valérie" # création de la variable
nom = 227 # génère une erreur dès l'éditeur de code !
N.B. On peut demander à GDscript de fortement typer le type d'une variable à sa création sans lui indiquer le type en écrivant :
var nom := "Françoise"
est équivallent à :
var nom : String = "Françoise"
Déclaration d'une variable :
String nom = "Julia";
Le type de la variable est obligatoirement indiqué dans sa déclaration.
let nom = "pascal";
Un peu de vocabulaire !
+ - * = sont des opérateurs de même que < > >= (plus grand ou égal) == (pour vérifier que 2 éléments ont la même valeur) += (pour ajouter une valeur à un élément) ...
Un peu de vocabulaire !
Un bloc d'instruction est une suite d'instructions (de commandes de programmation)... voir les parties suivantes pour des exemples !
Les structures conditionnelles permettent au programme d’exécuter différentes actions en fonction d’une condition donnée. Par exemple, si une certaine condition est vraie, le programme exécute un bloc spécifique de code; sinon, il passe à une autre partie du code.
numero = 23
if numero == 4:
print("Le numéro est 4")
numero = 23
if numero == 4:
print("Le numéro est 4")
else:
print("Je ne sais pas quel est le numéro")
Comme en Python
var numero = 23
if numero == 4:
print("Le numéro est 4")
else:
print("Je ne sais pas quel est le numéro")
int numero = 4;
if (numero == 4) {
print("Le numéro est 4");
}
N.B. L'indentation est une convention. On pourrait aussi bien écrire (par exemple) :
int numero = 4; if (numero == 4) {print("Le numéro est 4");}
int numero = 23;
if (numero == 4) {
print("Le numéro est 4");
}
else {
print("Je ne sais pas quel est le numéro");
}
C'est presque comme en Java.
let numero = 4;
if (numero == 4) {
alert("Le numéro est 4");
}
N.B.
let numero = 4; if (numero == 4) {alert("Le numéro est 4");}
let numero = 23;
if (numero == 4) {
alert("Le numéro est 4");
}
else {
alert("Je ne sais pas quel est le numéro");
}
(à faire !)
Les boucles sont utilisées pour répéter l’exécution d’un bloc spécifique de code jusqu’à ce qu’une certaine condition soit remplie ou jusqu’à ce qu’une limite soit atteinte. Cela permet aux programmes d’effectuer des tâches itératives plus rapidement et efficacement.
chiffre = 0
while chiffre < 10:
print(chiffre)
chiffre = chiffre+1
var chiffre = 0
while chiffre < 10:
print(chiffre)
chiffre = chiffre+1
int chiffre = 0;
while (chiffre < 10) {
print(chiffre);
chiffre = chiffre+1;
}
let chiffre = 0;
while (chiffre < 10) {
alert(chiffre);
chiffre = chiffre+1;
}
ou plutôt, pour avoir l'affichage des chiffres en une seule fois :
let chiffre = 0;
let tousleschiffres = "";
while (chiffre < 10) {
tousleschiffres = tousleschiffres+chiffre;
chiffre=chiffre+1;
}
alert(tousleschiffres);
Ecrire les chiffres en partant de 0
for i in range(10):
print(i)
range(10) est une liste de nombre de 0 à 9, ça peut se noter aussi : [0,1,2,3,4,5,6,7,8,9]
On peut donc aussi écrire :
chiffres = [0,1,2,3,4,5,6,7,8,9]
for i in chiffres:
print(i)
for i in range(10):
print(i)
ou
var chiffres = [0,1,2,3,4,5,6,7,8,9]
for i in chiffres:
print(i)
GDscript, c'est quasiment du Python !
int [] chiffres={0,1,2,3,4,5,6,7,8,9};
for (int i : chiffres) {
print(i);
}
N.B. int [ ] indique un tableau (ici, une liste) d'entiers
On peut aussi écrire :
for (int i=0;i<10;i=i+1) {
print(i);
}
let chiffres = [0,1,2,3,4,5,6,7,8,9];
chiffres.forEach(i => {
alert(i);
});
N.B. - Les tableaux (Array) sont des objets qui ont une méthode forEach() (Pour comprendre, cela nécessite de savoir ce qu'est une classe donc une méthode !) : cf la partie en annexe sur la Programmation Orientée Objet ! - Comprendre le => nécessite en plus de savoir ce qu'est une classe anonyme !
ou (plus évident à comprendre !) :
for (i=0;i<10;i=i+1) {
alert(i);
}
Les fonctions sont des blocs autonomes de code qui effectuent une tâche spécifique lorsqu’elles sont appelées par le reste du programme. Elles permettent aux développeurs d’organiser leur code en morceaux réutilisables et modulaires.
Exemple avec un programme compteur(a) où a est un nombre entier : écrit les nombres de 1 à a
On a d'abord la définition de la fonction puis un exemple de son utilisation.
def compteur(stop):
i = 1
while i < stop+1:
print(i)
i = i + 1
compteur(4)
func compteur(stop):
var i = 1
while i < stop+1:
print(i)
i = i + 1
func _ready():
compteur(4)
La fonction _ready() est lancée une seule fois au démarrage d'un programme en Godot (tous les exemples précédents étaient écrit dans cette fonction !). C'est une fonction qui est déjà écrite dans le moteur de jeu.
La déclaration de fonction :
static void compteur(int stop) {
int i = 1;
while (i < stop+1) {
System.out.print(i);
i = i + 1;
}
Son utilisation (à l'endroit approprié !) :
compteur(4)
Le code complet est (pour un programme qui ne ferait que ça) :
public class Test {
public static void main(String[] args) {
compteur(4);
}
static void compteur(int stop) {
int i = 1;
while (i < stop+1) {
System.out.print(i);
i = i + 1;
}
}
}
En fait, cette ligne sybilline est parfaitement logique et cohérente mais il faut d'abord avoir compris des notions un peu avancées de programmation objet pour que son sens apparaisse clairement.
function compteur(stop) {
let i = 1;
while (i < stop+1) {
alert(i);
i = i + 1;
}
}
compteur(4);
Cette partie va au delà de l'initiation à la programmation !
Il s'agit cependant juste d'un aperçu pour comprendre en gros de quoi il s'agit !
Les structures de données définissent comment les données peuvent être organisées, stockées et manipulées dans un programme informatique. Des exemples courants incluent les tableaux, les listes et les dictionnaires, qui permettent de stocker et d’accéder à des ensembles de données plus complexes.
N.B. Ceci n'est pas un cours de P.O.O. : Programmation Orientée Objet mais une vue générale de ce qu'est un obet voire un Node dans Godot Engine.
Les tous premiers programmes étaient écrits en langage machine en utilisant les instructions disponibles dans les microprocesseurs. C'est ce que l'on appelle l'assembleur. Ce sont des instructions très simples et basiques (En savoir plus ici...). Chaque microprocesseur à son propre jeu d'insctructions.
Ensuite, ont été dévelopés les compilateurs : ce sont des programmes écrits dans des langages évolués qui transforment ces langages en instructions comprises par les microprocesseurs. wikipedia
Ainsi, on peut écrire un programme avec un langage évolué et le compiler pour des ordinateurs différents (les programmes sont différents car ils s'adressent à des microprocesseurs différents et à des systèmes d'exploitation différents : Linux, Mac, Windows, Android...). Le résultat est qu'on utilise un programme qui fonctionne indépendement des programmes du langage associé puisqu'il est en langage machine.
Un interpréteur fonctionne différemment. C'est le cas de Python (généralement) par exemple. Dans ce cas, les instructions évoluées du langage ne sont pas traduites en langage machine. En gros, c'est le programme Python qui va faire la traduction en langage machine au fur et à mesure que le programme fonctionne. Le programme ne peut donc pas fonctionner sans un autre programme qui lui est compilé et qui permet au code non traduit de fonctionner.
Et puis... le bytecode... Chacune des méthodes précédentes à ses avantages et ses inconvénients. Les programmes compilés sont très rapide mais demandent une phase de compilation qui prend un peu de temps pour pouvoir être testés. Les programmes interprétés sont plus lents mais il démarrent plus rapidement en général.
Une approche intermédiare existe : le bytecode : Il s'agit de précompiler les programmes dans un jeu d'instructions basiques qui ne dépendent pas d'un microprocesseur en particulier. Ce code spécifique sera interprété à l'exécution. Etant donné que le jeu d'instructions en question est proche du langage machine, il fonctionne beaucoup plus rapidement que pour le cas d'un programme interprété.
Les 2 exemples les plus connus de cette approche sont les programmes écrits en Java et le webassembly qui est le bytecode des navigateurs (cela permet d'avoir des programmes pour les jeux vidéos dans le navigateur). Les programmes écrits avec Godot Engine fonctionnent ainsi dans les navigateurs.
Pour Java, on peut écrire des programmes (compilés en bytecode Java) qui peuvent fonctionner sur n'importe quel ordinateur de bureau.
La compilation Just in Time (juste à temps) : Malgré cela, comme les programmes Java (déjà rapides) ne fonctionnaient pas assez vite pour certaines applications que les programmes compilés, il y a aussi une compilation qui est effectuée aujourd'hui pendant le fonctionnement d'un programme : c'est de cela qu'il s'agit.
A noter, les programmes en Javascript qui s'exécutent dans les navigateurs sont interprétés ET souvent compilés avec des systèmes JIT !!! C'est pourquoi ils peuvent aussi être plutôt rapides. La compilation étant un processus qui prend un certain temps, ce genre de programmes s'accélère au bout d'un certain temps d'utilisation car il commence par être interprété au départ pour fonctionner.
Noter que certaines versions de Python sont compilées et qu'il existe une version de Python qui tourne sur la machine virtuelle de Java qui peut ainsi interargir avec toutes les bibliothèques Java
Cependant, les programmes écrits en Python sont réputés être relativement lents par rapport aux autres systèmes ! D'autre part, les grosses applications sont rarement écrites en Python. En revanche, il semble que le temps de développement soit plus réduit avec Python.
Godot Engine avec GDscript : un langage interprété avec l'utilisation intensive de bibliothèques internes déjà compilées (donc très rapides). De plus, il y a diverses optimisations notamment avec l'utilisation de variables fortement typées qui accélèrent les jeux et les applications.
Javascript : un langage interprété avec compilation JIT dans les navigateurs.
Typescript est une variante de Javascript qui est utilisée pour écrire des applications plus robustes (les programmes en Typescript sont "transpilés" en Javascript, c'est à dire réécrits en javascript par des programmes pour fonctionner notamment dans les navigateurs).
Java et C# : des langages avec bytecode et compilation JIT de ce bytecode
Des langages compilés : C/C++, Rust, Go, FreePascal...
La grande majorité des langages de programmation sont écrits en C/C++ (comme les systèmes d'exploitation : Linux, Mac, Windows) avec une partie écrite en Rust pour certains d'entre eux (comme Linux).
La plupart de ces langages peuvent aussi être compilés en Webassembly qui est le "bytecode de bas niveau" compris par les navigateurs...