Forums Développement Multimédia

Aller au contenu

- - - - -

[pied à l'étrier] Structure de controle alternative : If

TUTO

24 réponses à ce sujet

#1 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 31 May 2011 - 13:40 PM

Bonjour :)

Le dossier "Débutants" s'enrichit tranquillement

Aujourd'hui le fameux if… else… et tout ça tout ça…

Vous verrez comment exécuter des instructions différentes selon que certaines conditions sont vérifiées ou non.

Le tuto est ici :)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#2 hubeert

  • Members
  • PipPipPipPipPipPipPipPip
  • 925 messages

Posté 01 June 2011 - 12:49 PM

coucou;
bon tuto. clair et précis.
Il me semble qu'il y ai une imprecision l'opérateur ? est bien aussi une structure de contrôle a mon avis.
On peut d'ailleurs l'employer comme des if imbriqués ou des else if

var :int=19;
trace(age>18?"majeur":(age<15? "pre-ado" : "ado"))
ou
trace(age>18?(age>25? "adulte" : "pre-adulte") :"enfant")
 
donne majeur et pre-adulte

On peut effectivement s'en servir pour affecter de valeurs a des variables.

#3 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 01 June 2011 - 13:04 PM

Salut,

Dans les opérateurs logiques il serait bien de parler du NOT (!).
En même temps, je pense que les opérateurs logiques devraient être dans un tuto séparés sur la logique booléenne, vu qu'ils s'utilisent dans beaucoup plus de contextes que lors de conditions "if". :)

#4 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 01 June 2011 - 13:44 PM

hi hi :) Salut Dada…

J'ai bien pensé à toi en écrivant ça, surtout le chapitre conversion implicite (je sais que c'est un de tes chevaux de bataille).

Le not j'ai réfléchi, d'abord il n'est pas toujours répertorié ds les logiques - j'ai fini par douter - et puis je l'utilise dès tout de suite au début du tuto, je considère donc qu'il a été vu avant, au chapitre types (hop ! en passant en parlant des bool)… je mettrai un lien dès que (je suis en train de rédiger le tuto en question)

merci de ta vigilance en tous cas, ça me rassure pendant que j'écris de savoir qu'une paire de screugneux vont ne serait-ce que survoler et pointer les inconsistances :)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#5 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 01 June 2011 - 19:43 PM

Chapeau! Quel souffle cette Nataly!

Tu as intérêt d'ailleurs à en avoir du souffle, parce-que si tu commences à mettre partout des parenthèses (lien à venir), tu t'engages en quelque sorte, au moins à venir faire le ménage même si au final tu ne les écris pas ces pages. Et oui, on n'est jamais à l'abri d'un tremblement de terre. Je disais justement cela à frangois l'autre jour car il avait mis une phrase à la fin de son tuto sur le débug annonçant une suite pour Flash Builder, et que justement il s'est retrouvé coincé dans je ne sais plus quel pays exotique à cause d'une histoire de volcan taquin (dixit!)




Maintenant quelques retours façon chippoti, manière que je ne perde pas tout à fait la forme:



http://ressources.me...ure_formulation
Cela m'a manqué que tu n'utilises pas le terme: expression booléenne




http://ressources.me...redecontrole#et
Ajouter une remarque sur le fait que on peut faire des choses comme...
if (parent != null && parent.width < 500) {
... car la deuxième partie de l'expression n'est évaluée que si la 1ere est vraie, ce qui offre une écriture plus concise que...

if (parent != null) {
        if (parent.width < 500) {
 
... et qui ne nous expose pas non plus, comme on aurait pu le croire, au fameux "impossible d'accéder à une propriété sur une référence d'objet null" (ou quelque chose comme ça).




Super les petits conseils sur l'utilisation de "esc" dans l'éditeur (d'ailleurs je ne connaissais pas). Mais peut-être préciser que tu parles de l'éditeur de Flash Pro? C'est pareil dans Flash Builder?





Citation

Il le fait. toto vaut maintenant zéro et c'est ce toto qui doit être “traité” par le if.
Ah tu vois ça comme ça? Moi je me disais que l'opérateur d'affectation renvoyait la valeur affectée, un peu comme une méthode du type...
if (toto.affecte(0))
... où ...
function affecte(value:*):*
... renvoie la valeur du paramètre qu'on lui passe.





Voilà, j'espère que je ne perds pas la main et que je suis toujours aussi enquiquinant :)

Et je termine par les compliments, comme tu me l'as conseillé (même si l'écrire dois casser un peu l'effet :cool: ):
Super tuto, vachement complet, très progressif, tu dépasses largement l'explication théorie/exemples pour nous apprendre tout ce qu'il est bon de savoir pour utiliser le if en pratique, tu as pensé à tout ou presque, arrête de les gâter tu vas nous les pourrir :mrgreen:

:Hola: :Hola: :Hola:

#6 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 02 June 2011 - 10:12 AM

@ Dada

Il parait que c'est une des premières étapes du développement de l'enfant : dire non à tout. J'ai considérablement grandi pendant a nuit, et décidé que ça ne mangeait pas de pain d'en reparler, de l'opérateur NOT

("Les opérateurs logiques prennent deux opérandes et renvoient une valeur booléenne." … Qu'elle dit, la doc. Donc logique, pas logique… :roll:
j'ai décidé qu'on s'en foutait. Celui qui a perdu sa femme n'ira pas la chercher là, dirait ma grand mère).

@ hubeert
Scuz, je n'avais pas vu ton commentaire, voilà ce que c'est de relire plus vite que son ombre ;)

Non l'opérateur tertiaire n'est pas une structure de contrôle en cela qu'il ne permet pas de structurer l'exécution du code. Il renvoie seulement une valeur. Dit autrement, tu ne pourras pas utiliser les opérandes pour exécuter des instructions (sauf à ruser avec des fonctions).

D'ailleurs on parle d'opérande (comme pour tous les opérateurs) et un opérande c'est… (je te laisse googueuliser) … les définitions varient mais qu'on parle de terme d'une opération ou de paramètre (variable ou constante) qui fait l'objet d'une opération, ou encore de donnée, on est bien d'accord qu'il ne s'agit pas d'instructions ;)

Cela dit, tu as bien fait de pointer la chose, ça n'aurait pas été la première fois que j'aurais énoncé une incorrection :)


@ lilive

Eh bien ! :) Toi non plus tu ne manques pas de souffle, pcq se relire (en vrai) tout ça et aussi vite, surtout quand on n'y est plus "obligé". Chassez le bibliothécaire, le bénévole revient au galop ! :D
Je suis très touchée que ton regard d'aigle ait encore la bienveillance de chercher des poux entre les lignes des tutos que je commets. Quelle abnégation ! :Hola:

D'abord les liens à venir.
Tu as raison : je vais mettre un morceau de papier dans mon porte-feuilles "en cas d'accident, prévenir Mediabox afin qu'"ils" effacent des tutos les parenthèses promettant un futur lien :lol:

je présente la très fatigante caractéristique (pour moi) de tenir les engagements auxquels j'ai librement consenti. Donc oui, je les ajouterai. Et là je ne prends pas grands risques vu que le tuto concerné par les futurs liens n'est pas loin d'être terminé :P



Plus épineux : valeur ou expression ?

J'adore ce type de chinoiserie (ce n'est pas ironique, je suis bien malade, il faut le savoir ;))

Et je suis bien em…quiquinée.
pour moi, expression renvoie à quelque chose de potentiellement "complexe" plus qu'une simple variable (même si la variable est un cas particulier de l'expression)

Citation

Suite d'opérateurs et d'opérandes décrivant un calcul à effectuer, version généralisée de la formule mathématique, par extension chaine à laquelle correspond un sens dans un langage donné. ici

Et justement je veux attirer l'attention sur le fait que ça, ça s'écrit :

if(maBool){traitement}

et qu'il n'est pas nécessaire qu'il y ait là une "formule" (expression donc, dans l'acception qui est mienne).
Pcq c'est ultra fréquent de voir :

if(maBool==true){traitement}

Ce qui illustre une compréhension partielle de l'histoire...

Si ça se trouve je suis encore victime du syndrome 5 ans et demi et ce soir j'aurai modifié (en tartinant encore trois lignes supplémentaires :? ce sera ta faute !)





Moi je me disais que l'opérateur d'affectation renvoyait la valeur affectée,

alors ça ?! :shock: j'en sais rien… Comment vérifier ? Je ne sais même plus si c'est quelque chose que j'ai appris ou déduit :oops:

… mais pourquoi renverrait-il la valeur affectée, il l'affecte déjà, c'est une forme de renvoi ciblé ? Non ?

… plus je réfléchis, moins je sais … :cry:


J'ai ajouté quelques lignes au paragraphe ET (&&) ainsi qu'une parenthèse (lien à venir) :P :lol:
… et pô bien compris l'exemple que tu proposes, faute d'un contexte de réalité (parent.null, ça parait dur quand même).
if (parent != null) {
        if (parent.width < 500) {

En vrai je manque de pratique sur le coup, je ne l'utilise jamais ds le contexte que tu illustres. Si ça se trouve je passe à côté de quelque chose… :roll:




En tous cas merci du long retour (je constate que tu n'es pas plus latéralisé que moi : j'avais, une fois de plus, écrit gauche pour droite… ah ah ! ), et je confirme que c'est une bonne idée les compliments à la fin, surtout avec un grand blanc, comme ça on peut ne carrer ds la fenêtre que les trois lignes bonnes pour l'ego et les mater benoitement le temps qu'on veut !! :texas:

:) merci vous trois :)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#7 hubeert

  • Members
  • PipPipPipPipPipPipPipPip
  • 925 messages

Posté 02 June 2011 - 11:29 AM

coucou Nataly

:lol: Tu parles sans doute de l'opérateur ternaire !!

Pourtant l'operateur ternaire est bien (aussi) une instruction conditionnelle; qui peut servir a structurer l’exécution :roll:
et il ne fait pas que renvoyer une valeur.
Il ne s'agit pas de ruser avec les fonctions.

un opérande est un terme mis comme argument (paramètre en français) dans une opération a ce titre un opérande en informatique peut être une instruction

condition ? instruction :autreIntruction
est exactement pareil que

if(condition)
instruction;
else
autreInstruction

exemple ( je ne passe par aucune fonction)

var nom="Nataly"
                var genre= "Femme"
                if( genre=="Femme")
                trace("bonjour, Mme  " + nom +".")
                else
                trace("bonjour, Mr  " + nom +".")
               
               
                //pareil que
               
                genre=="Femme" ? trace("bonjour, Mme  " + nom +".") :trace("bonjour, Mr  " + nom +".")

on peut meme agrémenter comme dans une instruction if

var nom="Nataly"
                var genre= "Femme"
                var mariee= false
                if( genre=="Femme"){ trace("bonjour, Mme  " + nom +".");
                if( mariee) { trace("bonjour, Mme  " + nom +".")} else {trace("bonjour, Melle  " + nom +".")}
                }else {
                trace("bonjour, Mr  " + nom +".");}
               
               
                //pareil que
               
                genre=="Femme" ? ( mariee ? trace("bonjour, Mme  " + nom +".")  :trace("bonjour, Melle  " + nom +".")):trace("bonjour, Mr  " + nom +".")
                 

Es tu convaincue?
:roll:

#8 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 02 June 2011 - 11:35 AM

Voir le messagehubeert, le 02 June 2011 - 11:29 AM, dit :


Es tu convaincue?
:roll:

:lol: non :lol:

play() est une instruction, on en est d'accord ?

tu en fais quoi ds un opérateur ternaire ?

toto= b?play():67;

toto sera valorisé soit d'une valeur soit d'une autre… là ça va crier un truc du genre contrainte imlicite vers un type void.

un opérateur n'est pas une structure de contrôle. Une fourchette n'est pas un couteau. Tous deux sont des couverts :)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#9 Goabonga

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2724 messages

Posté 02 June 2011 - 11:51 AM

bon :)

 genre=="Femme" ? trace("bonjour, Mme  " + nom +".") :trace("bonjour, Mr  " + nom +".")
 

C'est pas a faire !


  trace(genre=="Femme" ? "bonjour, Mme  " + nom +"." :"bonjour, Mr  " + nom +".");
 

....

instruction c'est le contenu d'une fonction .... play() est une function ...

#10 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 02 June 2011 - 13:01 PM

Voir le messageNataly, le 02 June 2011 - 10:12 AM, dit :

Plus épineux : valeur ou expression ?
[...]
Et justement je veux attirer l'attention sur le fait que ça, ça s'écrit :
if(maBool){traitement}
Pour moi ça s'écrit avant tout:
if (une chose que l on peut évaluer comme true ou false) {traitement}
Une des formes la plus simple étant
if(maBool){traitement}
une chose que l'on peut évaluer comme true ou false est justement ce qui s'appelle dans la littérature une expression booléenne. Je pense que c'est pour cela que ça m'a manqué, parce-que le terme expression est un terme courant que l'on rencontre, et je me dis qu'il faut donner cette clé aux lecteurs.
Exemple: http://help.adobe.co...tements.html#if
Ils disent:

Citation

Paramètres:
condition:Boolean — Une expression dont la valeur est évaluée à true ou false.

D'ailleurs toi-même tu utilises "expression" plus bas dans le tuto (sans l'avoir expliqué auparavant :shock: ! non, c'est pas possible, tu as du prévoir de l'expliquer dans un tuto préalable! :mrgreen: )

Voir le messageNataly, le 02 June 2011 - 10:12 AM, dit :

Pcq c'est ultra fréquent de voir :
if(maBool==true){traitement}
Ce qui illustre une compréhension partielle de l'histoire...
Tout à fait d'accord pour pointer cela. Mais c'est encore plus courant de voir:
if (monNombre > 10) { traitement }
Dans la forme la plus répandue de la condition, elle est une expression. C'est là où ça me fait zarb, que tu l'appelles "valeur".

Voir le messageNataly, le 02 June 2011 - 10:12 AM, dit :

Si ça se trouve je suis encore victime du syndrome 5 ans et demi et ce soir j'aurai modifié (en tartinant encore trois lignes supplémentaires :? ce sera ta faute !)
Je te fais confiance, si tu continues à t'interroger là-dessus et décide d'introduire le terme "expression", tu vas bien trouver comment faire sans paumer le lecteur.






Voir le messageNataly, le 02 June 2011 - 10:12 AM, dit :

Moi je me disais que l'opérateur d'affectation renvoyait la valeur affectée,
alors ça ?! :shock: j'en sais rien… Comment vérifier ? Je ne sais même plus si c'est quelque chose que j'ai appris ou déduit :oops:
Dans la doc http://help.adobe.co...html#assignment ils disent que l'opérateur = renvoie un résultat:

Citation

Résultat
Object — Valeur affectée, expression2.





Voir le messageNataly, le 02 June 2011 - 10:12 AM, dit :

J'ai ajouté quelques lignes au paragraphe ET (&&) ainsi qu'une parenthèse (lien à venir) :P :lol:
Super.
J'ai l'impression que c'est un peu plus que de la culture et de l'optimisation comme tu dis, même si effectivement le coup de laFonctionAuxDixMilliardsDeCalculs est bien trouvé. Il me semble que j'utilise régulièrement des choses comme:
if (unObjet != null && unObjet.unePropriete != uneValeur) {
mais c'est vrai que j'ai du mal là à trouver une exemple simple et concret.

Voir le messageNataly, le 02 June 2011 - 10:12 AM, dit :

… et pô bien compris l'exemple que tu proposes, faute d'un contexte de réalité (parent.null, ça parait dur quand même).
Si l'objet n'a pas encore été ajouté dans un conteneur:
var s:Sprite = new Sprite();
trace(s.parent);
Ouais... C'est vrai que ça m'arrive pas tous les jours non plus...

Rha ça m'agace! :mrgreen:

Bon je tente un truc:
if (champTexteInfo.parent != null && champTexteInfo.parent.width < 200) {
    champTexteInfo.decoration.visible = false;
}
Si on affiche dans un conteneur des informations relatives à ceconteneur, mais que ce container est trop petit, alors on se contente d'afficher ces information sans les décorations qui l'enjolive.
Mouais.... moyen convaincant mon exemple :cry:
C'est peut-être le signe qu'il faut oublier cette remarque. Autant pour moi...




Voir le messageNataly, le 02 June 2011 - 10:12 AM, dit :

[...] et je confirme que c'est une bonne idée les compliments à la fin, surtout avec un grand blanc, comme ça on peut ne carrer ds la fenêtre que les trois lignes bonnes pour l'ego et les mater benoitement le temps qu'on veut !! :texas:
Elle ose! Très bon! :mrgreen:

#11 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 02 June 2011 - 13:21 PM

Voir le messagelilive, le 02 June 2011 - 13:01 PM, dit :

Pour moi ça s'écrit avant tout:
if (une chose que l on peut évaluer comme true ou false) {traitement}

he bien en voilà une formulation qui me convient :D
je vais donc reprendre.


Citation

D'ailleurs toi-même tu utilises "expression" plus bas dans le tuto (sans l'avoir expliqué auparavant :shock: ! non, c'est pas possible, tu as du prévoir de l'expliquer dans un tuto préalable! :mrgreen: )

Tu sais quoi ?

Je te triple zute !! :mrgreen:



Citation

ils disent que l'opérateur = renvoie un résultat:

dans l'opérande à gauche non ? :? d'où ce commentaire : ↓

Voir le messageNataly, le 02 June 2011 - 10:12 AM, dit :

… mais pourquoi renverrait-il la valeur affectée, il l'affecte déjà, c'est une forme de renvoi ciblé ? Non ?



Citation

Il me semble que j'utilise régulièrement des choses comme:
if (unObjet != null && unObjet.unePropriete != uneValeur) {

Et c'est top comme exemple. D'ailleurs je vais le mettre ds ma boite à outils, je n'y ai jamais recours à tort, faute d'en avoir pris l'habitude.

Mais…














Je n'en parlerai pas plus que ça, cause je ne veux pas étayer ou illustrer une explication de connaissances réputées inexistantes, et je te quadruple zute :P La !

En revanche compte sur moi pour en faire un paragraphe avec renvoi qui va bien dans le tuto idoine quand j'y arriverai ;)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#12 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 02 June 2011 - 13:24 PM

Voir le messagegoabonga, le 02 June 2011 - 11:51 AM, dit :

instruction c'est le contenu d'une fonction .... play() est une function ...

c'est juste. Comme quoi je ne sais pas ergoter ;)

[edit]

quoique, c'est une fonction ds la classe qui la décrit, mais une méthode quand on l'utilise, donc une instruction comme une autre…

si, si ! je sais ergoter :mrgreen:
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#13 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 02 June 2011 - 13:53 PM

Voir le messageNataly, le 02 June 2011 - 13:21 PM, dit :

Citation

ils disent que l'opérateur = renvoie un résultat:
dans l'opérande à gauche non ? :? d'où ce commentaire : ↓

Citation

… mais pourquoi renverrait-il la valeur affectée, il l'affecte déjà, c'est une forme de renvoi ciblé ? Non ?
Je lisais la doc ainsi:

Opérateur +
forme: expression1 + expression1
résultat: la somme des deux expressions.
Pour moi ils disent que résultat, c'est-à-dire ce par quoi on peut remplacer "expression1 + expression1" est la somme des 2 expressions. L'opérateur "fait" quelque chose (la somme) et nous "renvoie" un résultat.

Opérateur =
forme: expression1 = expression1
résultat: Valeur affectée, expression2.
Je le lis pareil: l'opérateur "fait" quelque chose (l'affectation), et nous "renvoie" un résultat (expression2). Cad que le résultat de l'expression "expression1 = expression1" est "expression2".
Donc je peux faire des choses comme (toto = 5) + (titi = 8) et ça ne me pose pas de problème de lecture.

Je te disais plus haut que je voyais l'opérateur comme une fonction, quelque chose qui fait quelque chose et qui renvoie (return) un résultat. En voyant la chose ainsi je trouve que tout est très cohérent. D'ailleurs je me demande si cette vision n'est pas un reste de ce que j'avais lu sur la surcharge des opérateurs en C++, où on peut définir des opérateurs d'une façon proche de celle qu'on utilise pour définir des fonctions. Mais c'est de mémoire, à prendre avec des pincettes. [edit] ça se confirme http://www.siteduzer...operateurs.html [/edit]

Donc je disais que vu comme ça je me construis un truc simple et cohérent dans ma tête. Par contre si je le vois comme tu dis:

Citation

D'abord, il rencontre zéro.
Très bien, il “s'en souvient, le garde en tête”.
Puis il rencontre l'opérateur d'affectation = (égal).
Ah ah ! Il va donc s'agir pour lui de valoriser ce qui est tout de suite à gauche de cet opérateur avec ce qu'il “a en tête”, à savoir zéro.
Il le fait. toto vaut maintenant zéro et c'est ce toto qui doit être “traité” par le if.
J'ai l'impression que tu me dis que Flash est malin, et qu'il commence par faire l'affectation, et puis que comme il y a écrit toto, il sait bien qu'il faut tester la valeur de toto, il est pas c** quand même, ça se voit bien que c'est ça qu'on veut tester!

Mais comment tu m'expliques alors:

if ((toto = 5) + (titi = 8) == 13) trace("ça fait bien 13");
else trace("dans les choux mon pôte révise tes additions");
 


#14 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 02 June 2011 - 13:57 PM

Pour enfoncer encore le clou:

L'opérateur ++
Deux formes:
++expression
ou
expression++

La doc:

Citation

Ajoute 1 à une expression. L’expression peut être une variable, un élément de tableau ou une propriété d’objet. La forme avant incrémentation de l’opérateur (++expression) ajoute 1 à expression et retourne le résultat. La forme après incrémentation de l’opérateur (expression++) ajoute 1 à expression et retourne la valeur initiale de expression (la valeur précédant l’addition).

Donc un opérateur qui "fait" la même chose dans les 2 formes (ajouter 1) mais qui "renvoie" deux résultats différents, selon la forme utilisée (expression, ou expression+1)

#15 Goabonga

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2724 messages

Posté 02 June 2011 - 14:09 PM

Voir le messageNataly, le 02 June 2011 - 13:24 PM, dit :

quoique, c'est une fonction ds la classe qui la décrit, mais une méthode quand on l'utilise, donc une instruction comme une autre…

y'a pas une diference entre "methode" et "function" ( en as3 ) ?
T'as deja croisé des methodes en dehors d'une class ?

http://livedocs.adob...3/Function.html
http://livedocs.adob...e=00000064.html


:arrow:

Modifié par goabonga, 02 June 2011 - 14:11 PM.


#16 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 02 June 2011 - 14:17 PM

sûr que l'opérateur est une fonction ! enfin je dis sûr :roll: … oui, j'en ai même lu confirmation il n'y a pas longtemps… où ? la doc AS3, ou un texte sur as3… vu que je n'ai rien lu d'autre récemment :mrgreen:

et alors… :roll:
pour moi, j'affecte 8 et 5 à toto et titi que j'additionne.

Citation

il sait bien qu'il faut tester la valeur de toto, il est pas c** quand même, ça se voit bien que c'est ça qu'on veut tester!
LOL, mais oui, pas loin :D

il convertit en tout cas (il "coercitionne"… j'adore, je connaissais pas, et c'est tellement ça) la valeur de toto pour l'interpréter en booléen. exactement comme il aurait fait si on lui avait passé toto "tout court"

je n'ai pas plus de problème de lecture avec toto et titi, peut-être pcq c'est une si vieille croyance (quoiqu’erronée) que je ne vois même plus l'erreur.

Si tu veux le formuler à ta façon, ne t'en prive pas… Je n'y vois qu'une tellement subtile différence, limite rhétorique, que je ne peux même pas la tenir en tête.

Comme ce serait bête de générer des compréhensions fausses, je te laisse formuler tout bien tout propre (et tu n'oublies pas que tu t'adresses à des gens qui lisent un tuto sur le if, donc pas encore grosse culture informatique, juste les trois tutos en prérequis ;) :P)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#17 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 02 June 2011 - 16:53 PM

Voir le messageNataly, le 02 June 2011 - 14:17 PM, dit :

il convertit en tout cas (il "coercitionne"… j'adore, je connaissais pas, et c'est tellement ça) la valeur de toto pour l'interpréter en booléen. exactement comme il aurait fait si on lui avait passé toto "tout court"
Hum, je crois plutôt que:

il convertit (il "coercitionne"… je connais pas, ça sort d'où?) la valeur renvoyée par l'opérateur d'affectation pour l'interpréter en booléen. exactement comme il aurait fait si on lui avait passé toto "tout court".

Mais oui, le résultat est exactement le même, j'en conviens, puisqu'il se trouve que la valeur renvoyée par l'opérateur est elle de toto. Au final tu as raison je ne vois pas en quoi ça gêne de le présenter comme tu le fais.



[Oh non, je suis intarissable, un dernier argument me vient en tête et je ne peux m'empêcher de t'en faire part. C'est pas vrai! Mais achevez-le vous ne voyez pas qu'il souffre?]

Enfin, peut-être que si on abordait ensuite
if (toto++) {

Moi je me contenterais de dire:
Ici ça marche pareil que pour le cas précédent (avec l'affectation):
- l'opérateur fait son boulot, il ajoute 1 à toto
- l'opérateur renvoie une valeur, celle de toto avant l'opération, et c'est celle-là qu'on teste.
Cela me fais un modèle explicatif qui s'applique quelque soit l'opérateur.

Alors que toi tu devrais dire:
Ici c'est différent, car la valeur testée n'est pas celle de toto après l'opération, mais la valeur de toto avant l'opération.

Enfin bon, heu, je commence à avoir épuisé le charme de la discussion, même si c'est bien agréable de faire des considérations en s'attardant comme les malades que nous sommes sur 1 ligne d'un tuto qui en fait 2000, un après-midi pluvieux :)


[/Oh non, etc]

#18 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 02 June 2011 - 17:54 PM

Ayé grand greumeuleur en chef de la rigueur orientale :deal: j'ai tout bien passé le plumeau en duvet d'hirondelle ;)

***mais faites LES taire***

moi je déscotche pas du fait que si on renvoie on renvoie quelque part

if(laFonction())) renvoie "dans les parenthèses" ( :oops: je le pense comme ça)

toto+5 c'est pour moi la même chose que toto=fonctionPlus(5)

plus renvoie dans toto…  :roll: pas dans le vide, ce qui s'exprimerait comme je le pense, par : if( +5)

Et ton toto++ … même pas mal :lol:

Citation

La forme post-incrément de l'opérateur (expression++) ajoute 1 à expression et renvoie la valeur initiale de expression (avant l'addition).

c'est l'équivalent d'une fonction incremente(toto) à on qui passerait toto par référence…

:jesors:
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#19 hubeert

  • Members
  • PipPipPipPipPipPipPipPip
  • 925 messages

Posté 02 June 2011 - 17:58 PM

coucou
coucou
a mon avis tu te trompe Nataly.. l’opérateur ternaire ne sert pas qu'a imputer des variables.

"On l'utilise quand on veut valoriser une variable différemment selon qu'une condition est vérifiée ou pas. Et puisque ce n'est jamais qu'une alternative à la structure si, je vous la présente, non pas en français mais en AS3… ça changera ;)"

c'est vrai mais pas que ca !!!

si tu ecris
toto= b ? 7 : 67 il te metra 67 ( sans erreur ; pour lui toto= b est faux parceque b est pas defini donc toto=b donne 0

s tu mets
toto!= b ? 7 : 67 il te metra 7


si tu defini b par exemple toto: int=10; b:int=12
il metra 7

tu mélanges l' operateur d'affectation et l' opérateur égale ( pas dans ta tete mais dans ta maniere de faire)
si tu mets ce que tu as ecrit tu affectes une valeur a toto a l'aide de l’opérateur ternaire.
C'est possible mais uniquement dans les memes type comme tu as fait la
var age:int=28;
var commentaire:String;
commentaire=(age<18)?"pas majeur":"majeur";

toto et b etant defini

toto = b ? 7 : 67 il met toto = 7 ; mais bon ca ne présente pas un gros intérêt de faire ca..


toto= b?play():67; il marque contrainte implicite du type void sans rapport avec Function ;(parceque play() est pas défini) Mais ca na rien a voir avec lopérateur ternaire..
si tu fais ca

var toto:int=12;
var b: int=8;
trace(toto= b?15:60);
trace(toto);

toto egale 15
et toto egale 15

tu as comparer b ( ou le resultat) a l'aide de l'operateur ternaire ( ca sert a rien ici) tu lui dit
si ( b) (cest toujours vrai sauf si b egale 0; ou si tu definis pas b) fais ca ou ca si cest pas vrai.

fais ca encore
var toto:int=18;;
var b: int=12;;
function joue(messa:String){ trace(messa)}

toto= b? joue():60 ;trace(toto);

tu verras il te mets Nataly ( la fonction a bien été appelée) et toto egale 0 dans les trace parcequil a juste évaluer le résultat.
que fais t il? écrit comme tu l'as fait il teste b et b est bien défini (il est donc true; il la converti en booléen) .. donc il appelle la fonction joue();
pourquoi il met toto a 0 ?; parce que la fonction n'est pas un int donc il impute 0 a toto par défaut
en imputant a toto un truc vrai l'opérateur choisi de retourner la valeur du second opérande; mais ce faisant dans ce cas la il faut que les type soit identiques.

a cause de l’opérateur ternaire il compare d'abord le résultat c'est a dire 12 ici ; 12 lui semble vrai ( c'est vrai) il appelle la fonction..( c'est pour ça que si tu met b=0) il renverra 60..
il impute toto qui vaut quelque chose qui n'est pas de son type il met 0; cest a dire faux

situ fais la meme chose avec un opérateur de groupage..
(toto= b)? joue():60 ;trace(toto+"   "+ b);


l'opérateur teste le résultat de (toto=b) ca lui semble vrai il appele la fonction; il impute b a toto (voir le trace) toto vaut 12


goabonga j'ai pas compris ta reponse ( bon et plus loin : cest pas a faire ) :D
ni meme ce que tu veux dire par un instruction c'est le contenu d'une fonction..
une fonction c'est une séquence d'instruction pour moi ou meme uns seule instruction.
c'est une instruction comme une autre.

revenons a nos moutons.

La seule écriture correcte c'est donc

var toto:int=12;;
var b: int=12;;
function joue(messa:String){ trace(messa)}


toto==b ?joue("Nataly"):60 ;
 
il evalue le premier opérande il est vrai donc il évalue et retourne le deuxième opérande ; ici une fonction.
et j'ai appelé une fonction. et si toto n'avait pas été égal a b et bien il m'aurait renvoyer 60 l'affecter a b par exemple ou j'en auras fait ce que bon me semble.

j'aurai pu faire la même chose avec l'exemple précédent;.



Et l'opérateur ternaire est donc bien un opérateur de structure de contrôle qui ne sert pas uniquement a imputer des valeur mais bien a teste des conditions et n'importe lesquelles.

Qu'il serve également a affecter des valeurs a des variables(sous condition)est vrai ; mais il ne sert pas qu'a ca.
Mais bon cest que mon avis .. :roll:


Car un opérateur logique est une structure de contrôle car il exécute une instruction conditionnelle..
la preuve lorsque tu parles de || dans ton tuto tu parle bien d'opérateur dans un structure
de contrôle.

autre imprécision

var b:Boolean=true;
 
trace(!b);
trace(b);// b vaut toujours true
non il inverse bien la valeur et modifie b.
tu l'as ecrit toi meme

trace(!b) donne false c'est donc bien qu'il change la valeur, b n'est plus true une fois que tu l'inverse. Naturellement comme cest un opérateur unaire si la phrase d’après' tu l' impute a nouveau il va reprendre sa valeur . :D





Mais sinon ça na pas une grosse importance très peu de gens se servent de l'opérateur ?:

mais voyons l'avis des autres.. :P

#20 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 02 June 2011 - 18:23 PM

suis désolée hubeert, Lilive a épuisé toutes mes ressources mentales :mrgreen: je comprends pas ce que tu dis ni où tu veux en venir, et j'ai la flemme de forcer :oops:

alors on va simplifier :

moi je tiens à la précision : un opérateur ternaire n'est pas une structure de contrôle, toi tu sembles souhaiter qu'on la supprime…

je mets aux votes et s'il appert qu'il faut la supprimer, eh bien ça me fera un bon exercice d'assouplissement cortical :lol:
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#21 hubeert

  • Members
  • PipPipPipPipPipPipPipPip
  • 925 messages

Posté 02 June 2011 - 18:27 PM

coucou
dans certain morceau de code j'ai oublié ( :oops: ) d'ajouter le message a la fonction joue()

donc il faut lire joue("Nataly) pour avoir le bon trace !!

Nataly ne le supprime pas au contraire valorise le.. l'operateur ternaire est un opérateur de structure de contrôle très concis.

Modifié par hubeert, 02 June 2011 - 18:29 PM.


#22 hubeert

  • Members
  • PipPipPipPipPipPipPipPip
  • 925 messages

Posté 02 June 2011 - 18:49 PM

coucou
par contre dire que ! ne modifie pas l'opérande considéré c'est faux.
il modifie l'opérande considéré.
faire
var b:Boolean=true;
 
trace(!b);
trace(b);// b vaut toujours true

 
mais trace (!b) donne bien false
mais comme c'est un opérateur unaire, si la phrase d’après tu réimputes b évidement il retrouve sa valeur d'origine.

#23 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 02 June 2011 - 18:51 PM

Je ne saurais trancher s'il faut ou non dire que l'opérateur ternaire ? est une structure de contrôle. Dire que non ne me choque pas, parce-que même si on peut s'en servir comme d'un if...else, il me semble que c'est une bonne façon de produire du code dur à lire, et qu'il ne faut pas en abuser. Le propos de Nataly c'est aussi de présenter des pratiques simples et courantes de coder, pour des novices.

#24 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 02 June 2011 - 18:57 PM

Voir le messageNataly, le 02 June 2011 - 18:23 PM, dit :

suis désolée hubeert, Lilive a épuisé toutes mes ressources mentales :mrgreen:
Haha oui moi aussi j'ai ma dose. On a bien parlé mais là j'en peux plus!
Très bien le dernier petit coup de plumeau :)

#25 hubeert

  • Members
  • PipPipPipPipPipPipPipPip
  • 925 messages

Posté 02 June 2011 - 19:44 PM

coucou

lilive c'est la voix(ou voie) de la sagesse faire ce que j'ai fait avec l’opérateur ternaire ne mène qu'a du code illisible et difficile a utiliser pour un débutant.
En ce sens Nataly peut ne pas en parler mais si elle en parle que ce soit f
ait en évoquant les deux possibilités sans exclure de facto une possibilité qui est réelle.

C'était bien entendu le sens de mon intervention; car j'ai eu l'impression en lisant le tuto que l’opérateur ?: ne pouvait servir qu'a imputer des variables en fonction de condition; alors que je pense que ce n'est pas exact.

il a exactement la même structure que if else. sauf que if c'est ? et else cest : et il est d'un rendu plus compact même sil est moins lisible

mais bon ca n'a pas une grosse importance non plus.
le tuto de Nataly je le trouve tres bon et qu'elle ne se prenne pas la tête avec des considérations purement anecdotiques dans le cadre de la cible visée.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP