Bonjour,
Je cherche à faire le contraire de la fonction DANS() sur Windev
Une idée ?
Merci !
Bonjour,
Je cherche à faire le contraire de la fonction DANS() sur Windev
Une idée ?
Merci !
Mettre un "PAS" dans ta condition :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SI PAS iTaValeur DANS (iVal1,iVal2) ALORS FIN
Bonjour,
Je ne connais pas cette fonction et je ne la trouve pas dans l'aide.
Peux-tu mettre un lien de l'aide ?
Merci Leon pour cette syntaxe (et non une fonction) de SI que je ne connaissais pas.
Bonjour
Je suis d'accord avec la solution de LeonCosnyd mais je préfère utiliser _DANS_ ce qui évite de tester toutes les valeurs.
Bon dev
------------------------------------------------------------------------------------------------------------------------------------------
Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
------------------------------------------------------------------------------------------------------------------------------------------
Site perso : Formation, Expérience, Réalisations, ...
Blog : Le Blog de DSR57 - Programmation WinDev
http://doc.pcsoft.fr/fr-FR/?1512003&...teurs_logiques
(J'avoue que cela n'est pas beaucoup documenté...)
Bonjour Lo²
Tu trouves les explications dans la page "Opérateurs de comparaison" : http://doc.pcsoft.fr/fr-FR/?1512006&...de_comparaison
Bon dev
------------------------------------------------------------------------------------------------------------------------------------------
Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
------------------------------------------------------------------------------------------------------------------------------------------
Site perso : Formation, Expérience, Réalisations, ...
Blog : Le Blog de DSR57 - Programmation WinDev
merci Leon et drs57 pour les liens
Merci pour vos réponses rapides
Effectivement, la doc est pas très complète, je l'avais déjà vu
Je mettais pas le "PAS" au bon endroit.
Merci !
Donc tout le monde a raison, pas de souci (surtout dsr57 concernant _DANS_ qui est une version optimisée de DANS).
Par contre, de mon point de vue, on peut pas accuser la doc à-tout-va.... IN, NOT IN, IF, IF NOT, WHILE, WHILE NOT.... c'est de l’algorithmique... après WLangage, PHP, Javascript, C# ou C++ même combat.
Bonjour,
Totalement contre l'utilisation de PAS et à fond pour l'utilisation de _DANS_
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 lnIndex is int lnIndex = 2 IF (lnIndex _IN_ (7,8,27,2)) = True THEN Info("Valeur trouvé") ELSE Error("Valeur introuvable") END
Je pense que chacun a ses habitudes et ses repères en programmation. Certains préféreront utiliser un "PAS", d'autres préféreront mettre un "= faux" à la fin.
Le principal est de bien se repérer dans le code et l'uniformiser si l'on travaille en équipe.
Exemple :
On peux lire le code ainsi : "Si mon tableau n'est pas vide" ! Cela devient presque du langage naturel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SI PAS tabMonTableau..Vide ALORS FIN
contre
Qui correspond à une syntaxe plus académique en programmation où l'on compare une valeur avec une autre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SI tabMonTableau..Vide = faux ALORS FIN
Je ne pense pas qu'il y ai de bonnes ou de mauvaises syntaxes.
Disons blanc bonnet et bonnet blanc, schtroumpfbouchon et tirebouschtroumpf....
En revanche _DANS_ est réellement différent de DANS, il n'est pas ici question d'esthétique du code.
Je ne remet pas en question l'utilité des "_x_". Cela a un réel impact sur l’exécution du code. Je l'utilise couramment sur tout ce qui est ET, OU, A ! Je me demande même parfois ce n'est pas cette syntaxe qui devrait être par défaut !
Je te rejoins complètement sur cette syntaxe par défaut
J'ai bien compris ! pardon si je redis ce que tu disais.... je voulais placer tirebouschtroumpf....
Le comportement de ET, OU, A et DANS n'est pas révisé pour des raisons (je suppose) de rétro-compatibilité mais je suis d'accord pour (ou redire ) que c'est un choix regrettable....
Pour la fonction DANS, il est presque obligatoire d'écrire _DANS_ du coup ?
Puisque le but de cette fonction sert a chercher une valeur dans une variable, une fois que celle-ci est trouvée la condition est vrai
Ce n'est pas "obligatoire" mais conseillé si tu souhaites optimiser tes performances.
Si tu met DANS :
Windev va faire la comparaison de toutes les valeurs puis seulement après il va déterminer si la condition est vraie ou fausse
Si tu met _DANS :
A la première comparaison qui est vraie, windev juge qu'il n'est pas nécessaire de continuer à comparer les autres valeurs et termine donc son opération directement = gain de temps
Pour répondre à ta question moi je répondrais OUI ! (EDIT : Mon OUI s'applique uniquement à la fonction DANS !)
Par contre cela ne doit pas être systématique pour les A, ET, OU car cela dépend de ce que tu souhaites faire.
Par exemple tu as un formulaire de contact (tout bêtement). Au clic sur le bouton de validation de celui-ci tu veux vérifier que certains champs sont bien renseignés :
Ceci est l'exemple type d'un code que j'ai pu observer dans un projet existant de ma société...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 PROCEDURE procVérifieFormulaire(sNomChamp est une chaine) SI {sNomChamp,indChamp} ~= "" ALORS {sNomChamp,indChamp}..CouleurFond = iRougeClair RENVOYER(Faux) SINON RENVOYER(Vrai) FIN FIN SI procVérifieFormulaire(SAI_NOM..Nom) ET procVérifieFormulaire(SAI_PRENOM..Nom) ET procVérifieFormulaire(SAI_TELEPHONE..Nom) ALORS // Validation du formulaire FIN
Dans le cas précédent je souhaite que toutes les conditions soient exécutées car en plus de faire la comparaison la fonction va mettre en évidence les champs à remplir. Si je met des _ET_ et que le champ de saisie SAI_NOM est vide, il n'y aura que lui avec une couleur de fond, alors que les autres peuvent aussi être vide.
Je ne vais donc pas aujourd'hui faire une recherche sur tout le projet de "ET" pour le remplacer par "_ET_" pour ce genre de situation !
Bonjour
L'ensemble des intervenants sont d'accord sur l'utilisation de l'opérateur _DANS_ pour des raisons d'optimisation. Mais je souhaite revenir sur un détail des interventions
Envoyé par tunizarJe suis a moitié d'accord avec tunizar sur l'utilisation de PAS et souhaite apporter une réponse à l'interrogation de Lo². La moitié ou je suis d'accord c'est pour des raisons d'optimisation, car sauf erreur de ma part la ligne suivante :Envoyé par Lo²
entraine deux tests, le premier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part SI PAS iTaValeur DANS (iVal1,iVal2) ALORS
entrainant un résultat de type booléen, et le deuxième
Code : Sélectionner tout - Visualiser dans une fenêtre à part iTaValeur DANS (iVal1,iVal2)
Nous avons donc deux tests alors que l'on pense en codé que un. La partie dans laquelle je m'interroge et je suis moins d'accord est : comment coder le cas ou seulement les valeurs non comprises dans la suite nous intéressent, WinDev n'a pas d’opérateur de comparaison PASDANS ou _PASDANS_, donc si on reprend un exemple en prenant en compte l'aspect optimisation on devrait codé notre algorithme comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part résultat du premier =faux
Mais comment ce code sera analysé, jugé par un collègue ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SI iTaValeur DANS (iVal1,iVal2) ALORS //Ne rien faire SINON li_compteur++ FIN
Quel choix faire ?
Voilà pour mon intervention, bon dev à tous
------------------------------------------------------------------------------------------------------------------------------------------
Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
------------------------------------------------------------------------------------------------------------------------------------------
Site perso : Formation, Expérience, Réalisations, ...
Blog : Le Blog de DSR57 - Programmation WinDev
J'utilise très souvent PAS mais je ne m'étais pas posé la question sur les 2 tests effectués.
Merci dsr57 pour cette éclaircissement, même si une explication de tunizar aurait été pas mal.
Partager