SQL : le véritable Esperanto
"Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)
MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !
En général chaque développeur connaît l'avis d'un ou deux profs sur cette question, et c'est un domaine beaucoup moins normé que les maths et donc où l'avis des profs est aussi subjectif que celui d'un développeur confirmé.
Personnellement, je connais pas mal de développeurs (profs compris) qui ont pour règle de ne jamais écrire de parenthèses inutiles, au moins quand une série d'opérateurs est homogène (par exemple en C : (&&, ||, !) ou (|, &, ^, ~) ou encore (*, /, -, +, %)).
Des parenthèses en trop peuvent alors faire apparaître un oubli, une faute de frappe... mais c'est pas le but premier, ce dernier étant seulement d'avoir une seule manière d'écrire une expression, ordre des opérandes mis à part.
Ceux-là n'écriront jamais x = y + (3 * z), ni même if ((x > 1 && y > 1) || (z > 1 && t > 1)). Moi non plus, d'ailleurs (sauf en WinDev, évidemment).
Quoi qu'il en soit il est possible d'écrire sans parenthèses dans WinDev, et dans ce cas, ça ne respecte pas la règle commune. C'est donc bien une faute.
PS. J'ai mis la réponse à mon petit exemple dans le post ci-dessus.
Allez, j'ai la flemme de le signaler comme bug.
En voici encore un bien gratiné et très ancien :
Et oui, le tirage d'un nombre entre 1 et 100000 ne concerne que 32768 valeurs, les autres on s'en fiche !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 taValeursUniques est tableau associatif (*, *, wlEntier) de booléens POUR j = 1 A 10 TableauSupprimeTout(taValeursUniques) POUR i = 1 A 1000000 taValeursUniques[Hasard(1, 100000)] = Vrai FIN Trace(TableauOccurrence(taValeursUniques)) // Affichera toujours 32768 valeurs uniques FIN
Incroyable, non ?
Explication plausible : Hasard se baserait sur rand en C, qui va normalement de 0 à 32767. Ce qui n'empêche pas la doc de WinDev d'affirmer qu'on peut demander un intervalle de 0 à 2 milliards... c'est gonflé.
Bonjour,
Pour la fonction hasard c'est normale dans le sens où cette fonction est documenté et voici l'explication.
la touche est ton amie. l'aide ne mord pas quand on la consulte...
PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)
Pensez à utiliser les votes et à cliquer sur , merci
En fait c'est plus sioux, car une boucle "prouve" le contraire:
J'ai bien des nombres entre 1 et 100000.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 nCompteur est un entier POUR nCompteur = 1 A 10000 Trace(Hasard(1,100000)) FIN
Le problème semble donc venir du tableau associatif, et non de Hasard().
Tatayo.
Voici la note de l'aide mise en lien
Noyau aléatoire
Le "noyau" dans lequel le nombre aléatoire est "choisi" peut être initialisé par la fonction InitHasard.
Si la fonction InitHasard n'est pas appelée, les valeurs aléatoires générées par la fonction Hasard seront les mêmes à chaque exécution du programme.
la touche est ton amie. l'aide ne mord pas quand on la consulte...
PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)
Pensez à utiliser les votes et à cliquer sur , merci
ok je comprend.
L'aide devrais indiquer que la limite de la borne maximale (on devrais même dire l'écart antre la borne min et max) n'est pas que pour Webdev Code navigateur mais bien pour toute la série de PC-Soft.
la touche est ton amie. l'aide ne mord pas quand on la consulte...
PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)
Pensez à utiliser les votes et à cliquer sur , merci
Effectivement, je ne l'avais pas compris ainsi.
Je viens de refaire un test rapide:
Je n'obtiens que 1,3,5,7 et 9 (dans le désordre). Avec 131072 je n'ai que 1,5 et 9, et avec 262144 je n'obtiens plus que 1 et 9...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 nCompteur est un entier nNombre est un entier POUR nCompteur = 1 A 1000000 nNombre = Hasard(1,65536) SI nNombre < 10 ALORS Trace(nNombre) FIN FIN
C'est bon à savoir.
Tatayo.
Bonjour,
Pour le point 1 de Hibernatus34 au sujet des dates il est vrai que Par défaut, les variables de type Date, Heure et DateHeure sont initialisées avec l'heure et la date système au moment de l'exécution du programme. et que pour changer ce comportement il faut utiliser DateHeureParDéfaut
(ça ne change rien au problème d'utilisation avec un variant)
Pour les opérateurs logiques il y a une info dans l'aide http://doc.pcsoft.fr/fr-FR/?1512003&...TSPECIAL000116
Je ne dis pas que c'est normale, je dis juste que les fonctions sont documentées.
Ensuite d'autres logiciels ont leurs contraintes de programmation.
la touche est ton amie. l'aide ne mord pas quand on la consulte...
PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)
Pensez à utiliser les votes et à cliquer sur , merci
Je sais ça, mais ça ne change rien, pour plusieurs raison :
1. La partie heure d'un DateHeure est relative à la partie date. Ainsi, 13h20 le 2 janvier n'a aucun lien avec 13h20 le 5 février. Ainsi, quand j'affecte à un DateHeure une Date, c'est un cast implicite puis une copie, et je devrais écraser le DateHeure complet (sémantique de valeur).
Ce que je veux dire par là, c'est que l'heure présente avant la copie ne devrait pas rester là, car elle n'a plus aucun sens, et donc on se fiche de sa valeur par défaut.
2. Une conversion de valeur devrait toujours être déterministe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 PROCEDURE Toto(LOCAL dhDate est DateHeure) RENVOYER DateHeureDifférence(dhDate, gdhDateRéférence)3. Pour changer uniquement la partie date, il existe un moyen explicite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 dDate est Date = "20130101" Trace(Toto(dDate)) Multitâche(100) Trace(Toto(dDate)) // N'affiche pas pareil que la 1ère fois !
Sur ce point, je n'ai aucun doute, le fonctionnement actuel est parfaitement illogique, et inexcusable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part dhDateHeure..PartieDate = dDate
PS. Je viens de trouver un argument plus clair et percutant :
rToto doit contenir 8.51 ou 8.0 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 rToto est un réel = 42.51 nBob est un entier = 8 rToto = nBob
Pour un DateHeure c'est pareil.
Bonjour,
Personnellement, je préfèrerai qu'un éditeur s'implique pour fournir une liste de bugs.
J'ai regardé le "BugDisplayer 4D" à l'adresse http://www.bugs.4d.fr.
Hélas, il n'est pas si transparent que ça, car en "accès libre" on ne peut voir que quelques bugs corrigés.
Il y a un accès avec autorisation qui doit sans doute donner plus de visibilité.
Autre exemple avec Microsoft.
A plusieurs reprises recherchant sur le web la cause de fonctionnement bizarre ou plantage, je suis tombé sur des pages de la "Knowledge Base" Microsoft qui décrivaient le problème et annonçaient clairement que c'était un bug, soit pas encore corrigé, avec parfois la marche à suivre pour le contourner (en attendant), soit déjà corrigé avec un lien vers le correctif ou le Service Pack.
Je suis convaincu qu'une liste publique de bugs est vitale pour les concepteurs/développeurs...
Prendre un axe technique pour un développement et au bout constater qu'il y a un bug, fait perdre non seulement du temps et de l'énergie, mais aussi de la crédibilité vis à vis de ceux à qui le développeur rend des comptes.
Nous, "les clients de PC SOFT", pouvons comprendre que leurs produits ne soient pas exempts de bug.
Nous même avons notre part de bugs dans nos propres développements.
Alors une liste publique de bugs c'est déjà un moindre mal et offre des avantages.
(1) avantage pour le développeur qui n'a plus à signaler le bug si déjà répertorié, ni à fournir un projet de démonstration du bug (ouf !), et qui peut aussi éviter les bugs connus.
(2) avantage pour le Service Technique de PC SOFT qui n'a plus à suivre des signalements redondants du même bug.
C'est juste du bon sens.
Pour ma part, c'est la mise en avant de l'indirection "bonne à tout faire" que je remets en cause.
Dans l'exemple donné par Arnaud, une hiérarchie de types d'objets graphiques (Fenêtre, Champ) permettrait bien plus d'efficacité et de robustesse que la "rustine" indirection du WLangage.
Sinon, pour en revenir au sujet de départ, et si l'on parle de manques ou d'erreurs de conception, je dirai que la limitation la plus importante de windev à mon humble avis est l'impossibilité d'accéder/manipuler les classes de windev.
Par exemple, impossible de manipuler les fenêtres autrement que par les fonctions disponibles Ouvre(), etc...
Donc du coup impossibilité de dériver l'objet fenêtre de windev, et d'y ajouter ses propres méthodes, etc...
Si l'on veut créer des classes qui manipulent des objets windev de manière générique, on est obligé de passer par le nom de l'objet (du champ par exemple) et de fonctionner avec les indirections.
C'est lourd lourd...
Perso., je me heurte tous les jours à cette limitation.
E-Norme ! Si Windev n'est pas un langage objet, pourquoi peut-on faire de la POO avec alors ? Ca n'a strictement aucun sens !
Merci pour ces remontées ! Encore heureux qu'il y ait quelques canaux parallèles permettant de voir ce qui se trame ouvertement. Et cela permet surtout de connaître "ce qu'il y a sous le capot", même si je m'en doutais pour la plupart des choses...
On peut considérer que ce besoin est envisagé "dans l'autre sens", avec les modèles: modèles de champs, de fenêtres, de pages et d'états.
Par l'héritage, un modèle permet "d'injecter" des fonctionnalités génériques dans d'autres objets d'IHM.
Ainsi, il est possible d'hériter et de surcharger tes propres objets d'IHM.
... et source d'erreurs, comme déjà dit plus haut dans la discussion.
En même temps le formateur n'a pas tout à fait tort. WinDev n'est pas C# ou Java, sinon ça n'aurait aucun intérêt. C'est ça qu'il voulait probablement dire.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager