EricRogerGarcia
images/blog2/language-de-programmation.jpg

English translation

Les concepts fondamentaux de la programmation

 

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 !

Instructions / Mots clefs des langages

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).

Commentaires

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.

En Python, GDscript

# Ceci est un commentaire sur une seule ligne

En Java, Javascript

// Ceci est un commentaire sur une seule ligne

Pour info, en html

<!-- Ceci est un commentaire -->

En plus...

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.

Constantes

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.

Langages

Python

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 !

GDscript (Godot Engine)

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 !

Java

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;
  • Le mot-clef int indique qu'il s'agit, dans ce cas, d'un entier (integer).
  • En Java, chaque instruction doit se terminer par un ;

Eventuellement, on peut aussi avoir :

static final int UNECONSTANTE = uneInstanceDunObjet;
  • La compréhension de l'intérêt du mot-clef static implique la compréhension de la notion d'objet et d'instance d'objet. Elle n'est indiquée ici que pour mémoire.

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 !

Javascript

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).

Variables

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.

Concepts

Nom

Le nom de la variable que l'on va utiliser à la place de sa valeur dans le code

Type d'une variable

Types courants de variables (voir des types particuliers dans la partie Langages)

  • Entier / Integer : -421; -45, -4, 0, 3, 9, 27, 531...
  • Flottant (à virgule flottante) / float : -421, -32.456, 0; 9, 9.56, 45.236...
  • caractère : 'a', 'D', 'ç' , '§'...
  • Chaîne (de caractères) / String : "Bonjour !"
  • ...

Valeur

Si truc est une variable de type Entier qui contient 5. Sa "valeur" est 5 !

Portée

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.

Langages fortement et faiblement typés

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

Langages

Python : faiblement typé

nom = "François" # création de la variable
nom = 227 # ne génère pas d'erreur !

GDscript (Godot Engine)

Faiblement typé

var nom = "François" # création de la variable
nom = 227 # ne génère pas d'erreur !

Fortement typé (c'est comme on veut !)

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"

Java : Fortement typé

Déclaration d'une variable :

String nom = "Julia";

Le type de la variable est obligatoirement indiqué dans sa déclaration.

Javascript : faiblement typé

let nom = "pascal";

PHP

Opérateurs

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) ...

Bloc d'instructions

Un peu de vocabulaire !

Un bloc d'instruction est une suite d'instructions (de commandes de programmation)... voir les parties suivantes pour des exemples !

Structures conditionnelles / Branchements

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.

Si ... Alors ... (Sinon ... ) : Branchement If

Python

If

numero = 23
if numero == 4:
    print("Le numéro est 4")

If Else

numero = 23
if numero == 4:
    print("Le numéro est 4")
else:
    print("Je ne sais pas quel est le numéro")

GDscript

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")

Java

If

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");}

If Else

int numero = 23;
if (numero == 4) {
    print("Le numéro est 4"); 
}
else {
    print("Je ne sais pas quel est le numéro");
}

Javascript

C'est presque comme en Java.

If

let numero = 4;
if (numero == 4) {
  alert("Le numéro est 4");
}

N.B.

  • alert() est une fonction qui permet d'afficher du texte dans une boite de dialogue
  • L'indentation est une convention. On pourrait aussi bien écrire (par exemple) :
    let numero = 4; if (numero == 4) {alert("Le numéro est 4");}
    

If Else

let numero = 23;
if (numero == 4) {
    alert("Le numéro est 4"); 
}
else {
    alert("Je ne sais pas quel est le numéro");
}

PHP

Cas... Parmi ... : Branchement Switch ou Case

(à faire !)

Boucles

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.

Tant que ... Faire ... : Boucle While

Python

chiffre = 0
while chiffre < 10:
    print(chiffre)
    chiffre = chiffre+1

GDscript

var chiffre = 0
while chiffre < 10:
    print(chiffre)
    chiffre = chiffre+1

Java

int chiffre = 0;
while (chiffre < 10) {
    print(chiffre);
    chiffre = chiffre+1;
}

Javascript

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);

PHP

Boucle Pour : Boucle For

Ecrire les chiffres en partant de 0

Python

for i in range(10):
    print(i)

Explications :

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)

GDscript

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 !

Java

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);
}

Explications :

  • int i=0 : valeur initiale
  • i\<10 : condition qui doit être remplie pour rester dans la boucle for
  • i=i+1 : augmentation de i en fin de boucle for

Javascript

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);
}

PHP

Fonctions

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)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.

Python

def compteur(stop):
    i = 1
    while i < stop+1:
        print(i)
        i = i + 1

compteur(4)

GDscript

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.

Java

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;
        }
    }

}
  • Test est le nom du programme
  • public static void main ... est le point de démarrage du programme (donc la fonction compteur(4) est dedans (on n'a pas besoin de comprendre le détail des instructions de cette fonction car c'est toujouts la même formule !).

    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.

  • Et ensuite, à l'extérieur du programme qui s'exécute mais dans le programme total se trouve la définition de la fonction

Javascript

function compteur(stop) {
    let i = 1;
    while (i < stop+1) {
      alert(i);
      i = i + 1;
    }
}

compteur(4);

PHP

Annexes

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 !

Structures de données

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.

Les bibliothèques en programmation : Library

Les objets (P.O.O. : Programmation Orientée Objet)

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.

L'instruction : New

Les Composants (Programmation orientée Composants)

Les interfaces utilisateurs

La programmation embarquée

Les bases de données

La programmation web "full stack"

Les cartes graphiques

Vitesse dans les programmes : Interprétation, Compilation, Bytecode (Java, C#, Webassembly...) et compilation JIT (Just In Time)

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.

Langages

  • Python un langage interprété : beaucoup de biliothèques de Python sont écrites en C/C++ (donc compilées).

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...

 

Eric-Roger Garcia - 08 avril 2024 à 10:18

Pas encore de commentaire

Ou