-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add: Scope Notion - FR #51
base: master
Are you sure you want to change the base?
Conversation
Update project
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fautes de frappes et une petite correction de mise en forme du texte
Co-authored-by: Drassero <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je pense franchement que le Java est un mauvais exemple pour parler de scope, dans la mesure où il n'y a pas réellement de scope global.
Chaque classe sert de namespace pour les constantes qu'elles contiennent, ainsi on ne peut pas réellement parler du scope global sans parler de la notion d'espace de noms.
Faire cette fiche tout d'abord avec le langage C serait très utile pour ça, permettrait de faire une transition vers du Java pour expliquer le scoping des variables d'instance par exemple, introduire la notion de namespace, qui pourrait être une prochaine fiche, et éventuellement expliquer cette notion en confrontant le Java avec le C++, puisqu'en C++ namespace est un keyword, et qu'ainsi cela est assez verbeux et donc parlant.
En résumé, je suis désolé, mais je pense qu'il va falloir reprendre cette fiche depuis le début.
Je serai intéressé de la refaire avec toi, je m'occuperai de la partie C en particulier, et je t'aiderai pour la partie Java, si cela te convient.
|
||
Cette fiche est une définition de la notion de `scope`. Elle réapparaît dans de nombreuses notions et il est nécessaire qu'elle soit comprise afin de poursuivre la lecture d'autre fiches. | ||
|
||
`Scope` est la traduction anglaise du mot `contexte`. Il définit la portée d'une variable. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je ne suis pas d'accord avec ça, scope n'est pas la traduction de « contexte » mais bien de « portée »
`Scope` est la traduction anglaise du mot `contexte`. Il définit la portée d'une variable. | |
`Scope` est la traduction anglaise du mot `portée`. Ainsi, quand on parle de `scope`, on parle de la zone dans laquelle est définie une variable, de sa portée. |
|
||
> :information_source: Les exemples de code sont rédigés en Java | ||
|
||
Cette fiche est une définition de la notion de `scope`. Elle réapparaît dans de nombreuses notions et il est nécessaire qu'elle soit comprise afin de poursuivre la lecture d'autre fiches. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Petite typo
Cette fiche est une définition de la notion de `scope`. Elle réapparaît dans de nombreuses notions et il est nécessaire qu'elle soit comprise afin de poursuivre la lecture d'autre fiches. | |
Cette fiche est une définition de la notion de `scope`. Elle réapparaît dans de nombreuses notions et il est nécessaire qu'elle soit comprise afin de poursuivre la lecture d'autres fiches. |
Il y en a 2 : | ||
|
||
• [Local](#Local) | ||
|
||
• [Global](#Global) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Il y en a 2 : | |
• [Local](#Local) | |
• [Global](#Global) | |
Il y en a 2 : | |
- [Local](#Local) | |
- [Global](#Global) |
|
||
Le `scope` local se réfère à un bloc de code. | ||
|
||
Tout ce qui est délimité par 2 accolades (`{}`) est considéré comme un bloc. Cela comprend donc toutes les méthodes (constructeurs y compris car rappelez vous qu'un constructeur n'est qu'une méthode un peu particulière) mais également les structures de code (boucles `for`, boucles `while`, `if` conditionnels, etc...). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
En français iirc, soit on met ...
, soit on met etc.
, on ne fait pas un mix des deux.
Ici, etc.
est plus approprié imo.
Tout ce qui est délimité par 2 accolades (`{}`) est considéré comme un bloc. Cela comprend donc toutes les méthodes (constructeurs y compris car rappelez vous qu'un constructeur n'est qu'une méthode un peu particulière) mais également les structures de code (boucles `for`, boucles `while`, `if` conditionnels, etc...). | |
Tout ce qui est délimité par 2 accolades (`{}`) est considéré comme un bloc. Cela comprend donc toutes les méthodes (constructeurs y compris car rappelez vous qu'un constructeur n'est qu'une méthode un peu particulière) mais également les structures de code (boucles `for`, boucles `while`, `if` conditionnels, etc.). |
System.out.println(name); //erreur à la compilation, variable introuvable | ||
``` | ||
|
||
*Et dans le cas d'un bloc :* |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Le contenu d'une fonction est déjà défini par un bloc de code en soi, donc il s'agit déjà d'un scope local déterminé par un bloc.
Enfin, du moins c'est ce qui me semble évident, contredisez moi si vous pensez le contraire 🤷
*Et dans le cas d'un bloc :* | |
*Autre exemple :* |
|
||
Le `scope` global se réfère, lui, à un milieu plus large : la classe dans laquelle la variable se trouve. | ||
|
||
Une variable définit avec un `scope` global sera accessible partout dans la classe y compris dans les méthodes. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Une variable définit avec un `scope` global sera accessible partout dans la classe y compris dans les méthodes. | |
Une variable définie avec un `scope` global sera accessible partout dans la classe y compris dans les méthodes. |
Vous pouvez donc utiliser une variable `globale` dans une méthode, elle ne sera pas détruite après l'exécution du corps de la méthode. | ||
|
||
```java | ||
public class MyClass { | ||
private int number = 3; | ||
private int anotherNumber = number + 4; | ||
public void aMethod() { | ||
System.out.println(number); | ||
//output : 3 | ||
System.out.println(anotherNumber); | ||
//output : 7 | ||
System.out.println(anotherNumber + 7); | ||
//output : 14 | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Il ne s'agit pas là de variables globales, mais de variables d'instance.
Cet exemple est donc faux.
} | ||
``` | ||
|
||
Cependant, il est possible d'avoir 2 variable du même nom dans 2 scopes différents : |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cependant, il est possible d'avoir 2 variable du même nom dans 2 scopes différents : | |
Cependant, il est possible d'avoir 2 variables du même nom dans 2 scopes différents : |
|
||
Cependant, il existe un moyen de référencer la variable de classe, celle avec un `scope` global. | ||
|
||
Ce moyen dépend d'un mot-clé. En Java on utilisera `this`. En PHP ce sera au moyen d'un tableau global (`$GLOBALS`) etc... |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ce moyen dépend d'un mot-clé. En Java on utilisera `this`. En PHP ce sera au moyen d'un tableau global (`$GLOBALS`) etc... | |
Ce moyen dépend d'un mot-clé. En Java on utilisera `this`. En PHP ce sera au moyen d'un tableau global (`$GLOBALS`) etc. |
|
||
- Local : | ||
|
||
- Défini au sein d'un **bloc** (méthode, `if`, `for`, etc ...) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Défini au sein d'un **bloc** (méthode, `if`, `for`, etc ...) | |
- Défini au sein d'un **bloc** (méthode, `if`, `for`, etc.) |
@Hokkaydo Finalement, on peut toujours essayer de corriger les petits points problématiques de cette fiche, et parler de scope global en disant que les packages sont dans le scope global, et qu'en en important un, on met toutes les classes qu'il contient dans le scope global également et que ces noms de classes servent de namespace pour les fonctions et procédures qu'il contient. On peut également parler d' |
@AntoineJT |
Aucun soucis, par contre je maintiens le fait qu'il faudra mettre ça dans une section plus générale que la POO, car ce n'est pas spécifique qu'à la POO. |
Entièrement d'accord |
Ajout de la notion de scope ainsi que de la section "Divers" pour la programmation orientée objet