Skip to content
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

Open
wants to merge 11 commits into
base: master
Choose a base branch
from

Conversation

Hokkaydo
Copy link
Member

@Hokkaydo Hokkaydo commented Oct 1, 2020

Ajout de la notion de scope ainsi que de la section "Divers" pour la programmation orientée objet

Copy link
Contributor

@Drassero Drassero left a 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

prog_orientee_objet/miscellaneous/fr/SCOPE.md Outdated Show resolved Hide resolved
prog_orientee_objet/miscellaneous/fr/SCOPE.md Outdated Show resolved Hide resolved
prog_orientee_objet/miscellaneous/fr/SCOPE.md Outdated Show resolved Hide resolved
prog_orientee_objet/miscellaneous/fr/SCOPE.md Outdated Show resolved Hide resolved
prog_orientee_objet/miscellaneous/README.md Outdated Show resolved Hide resolved
Co-authored-by: Drassero <[email protected]>
Copy link
Member

@AntoineJT AntoineJT left a 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.
Copy link
Member

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 »

Suggested change
`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.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Petite typo

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

Comment on lines +9 to +13
Il y en a 2 :

• [Local](#Local)

• [Global](#Global)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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...).
Copy link
Member

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.

Suggested change
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 :*
Copy link
Member

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 🤷

Suggested change
*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.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Comment on lines +77 to +91
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
}
}
Copy link
Member

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 :
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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...
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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 ...)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Défini au sein d'un **bloc** (méthode, `if`, `for`, etc ...)
- Défini au sein d'un **bloc** (méthode, `if`, `for`, etc.)

@AntoineJT
Copy link
Member

AntoineJT commented Oct 5, 2020

@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'import static afin d'illustrer pourquoi tout mettre dans le scope global est une mauvaise chose, et pourquoi donc bien scoper les variables est très important : en plus d'éviter de garder en mémoire des variables inutiles, cela permet de ne pas polluer ses scopes de variables inutiles, a fortiori le scope global.
Refaire toute la fiche serait une mauvaise idée, et le Java peut très bien convenir pour présenter la notion de scope, cependant en introduisant celle de namespace du même coup.
Ainsi, il serait peut être plus intéressant de regrouper les deux notions dans la même fiche, au lieu de faire des références circulaires entre les deux fiches.

@Hokkaydo
Copy link
Member Author

Hokkaydo commented Oct 5, 2020

@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'import static afin d'illustrer pourquoi tout mettre dans le scope global est une mauvaise chose, et pourquoi donc bien scoper les variables est très important : en plus d'éviter de garder en mémoire des variables inutiles, cela permet de ne pas polluer ses scopes de variables inutiles, a fortiori le scope global.
Refaire toute la fiche serait une mauvaise idée, et le Java peut très bien convenir pour présenter la notion de scope, cependant en introduisant celle de namespace du même coup.
Ainsi, il serait peut être plus intéressant de regrouper les deux notions dans la même fiche, au lieu de faire des références circulaires entre les deux fiches.

@AntoineJT
Je vois, je vais essayer de travailler là dessus dès que je trouve le temps (probablement pas avant ce week-end).

@AntoineJT
Copy link
Member

AntoineJT commented Oct 5, 2020

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.
Si jamais on se rend compte que la fiche est trop axée orienté objet anyway à cause de Java, on pourra toujours modifier avant de merge.

@Hokkaydo
Copy link
Member Author

Hokkaydo commented Oct 5, 2020

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.
Si jamais on se rend compte que la fiche est trop axée orienté objet anyway à cause de Java, on pourra toujours modifier avant de merge.

Entièrement d'accord

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants