Page 6 sur 7

Re: Methode et beauté du code

Publié : ven. 31/août/2012 23:24
par Backup
microdevweb a écrit :P(ou que comme dans certaines versions de Basic on puisse activer cette option)
EnableExplicit
DisableExplicit

Description

Active ou désactive le mode explicite. Quand il est actif, toutes les variables qui ne sont pas explicitement déclarées avec Define, Global, Protected ou Static ne seront pas acceptées par le compilateur et génèreront une erreur. Cela peut aider à éviter les erreurs de frappe.

Re: Methode et beauté du code

Publié : sam. 01/sept./2012 5:02
par microdevweb
Merci Dobro,

Bien content de savoir que cette option existe. (n'est repris dans l'aide que dans l'index) je penses d'ailleurs que je vais parcourir l'index fonction par fonction....

Re: Methode et beauté du code

Publié : sam. 01/sept./2012 11:37
par Ar-S
microdevweb a écrit : je penses d'ailleurs que je vais parcourir l'index fonction par fonction....
C'est bien le plus long, se rappeler que telle ou telle fonction existe :D

Re: Methode et beauté du code

Publié : sam. 01/sept./2012 13:31
par Robrock55
Autre chose chose importante, les conventions de nommages ! Même si PB est insensible à la casse, c'est quand même plus simple de se repérer :)
J'utilise perso maVariable, MaProcédure(), st_MaStructure, #MA_CONSTANTE, List_MaListe etc...

Selon les cas j'adapte évidemment, mais c'est super important d'autant plus quand on travaille en équipe où là, c'est primordial !!

Pour l'organisation des fichiers, cela dépend à mon sens du projet en question. Je réalise un logiciel actuellement avec gestion de profils, d'information par jour avec des bases de données. Je vais faire un dossier "Profiles", qui contiendra tout les codes nécéssaire pour la gestion profil, mais aussi son stockage. En temps normal je l'aurais mis dans un dossier "src", mais sur ce cas précis non.

Le secret si je puis dire, c'est de tout définir AVANT le projet, et de respecter ce qu'on décide.

Re: Methode et beauté du code

Publié : mar. 11/sept./2012 13:43
par SPH
Il m'arrive de faire ca :

Code : Tout sélectionner

for i=1 to 100
if random(10)=1
i-1
endif
next
Je schématise mais regardez bien le 'i-1'.
Est ce une mauvaise habitude a perdre ou est ce une beauté du code ?

Re: Methode et beauté du code

Publié : mar. 11/sept./2012 13:57
par Backup
si j'etais encore modo , j'aurai effacé une bonne partie des messages ici ,
qui pour la plupart ne reprennent que ce qui a deja été dis avant

donc manifestement posté par des membres qui ne prennent pas le temps de lire ce qui a deja été ecris ...

et j'aurai aussi effacé ton post SPH , car sous couvert de coller au topic, tu poses en fait une question sur ton code ..
donc cela aurai tout aussi bien pu etre ecrit en rubrique Debutant ..

je vais quand meme te répondre

a partir du moment ou on ne sait pas qu'elle est le but de cette boucle qui de façon pseudo aléatoire recule d'un cran
c'est difficile de te repondre ..

mais , il y a quand meme une chose qui est loin d'etre parfait dans ta boucle c'est ceci :

que ce passe t'il si dès le debut il sort 2 fois de suite le chiffre 1 ??

ben tu diminue "I" 2 fois ... ta boucle se retrouve a -1
et je ne sais pas pourquoi , mais quelque chose me dis que tu risque un plantage ...

bref pas le tout de diminuer "i " , encore faut t'il controler sa valeur Actuel avant ...
surtout si ce "i" sert par exemple a un point() ou un plot() , ou la c'est sur ça plante !

sinon le principe de changer la valeur de la boucle c'est simplement nécéssaire pour remplacer le Step i

Re: Methode et beauté du code

Publié : mar. 11/sept./2012 15:28
par SPH
Oui, je n'ai pas lu les posts d'avant. Je ne veux pas me taper 6 pages de commentaires... :?

Pour ce qui est de mon code, je ne demandais pas habilement si je pouvais le faire. Je le fais et j'y trouve une beauté.
Et non, le code ne donne jamais -1

Re: Methode et beauté du code

Publié : mar. 11/sept./2012 15:40
par djes
SPH a écrit :Oui, je n'ai pas lu les posts d'avant. Je ne veux pas me taper 6 pages de commentaires... :?

Pour ce qui est de mon code, je ne demandais pas habilement si je pouvais le faire. Je le fais et j'y trouve une beauté.
Et non, le code ne donne jamais -1
Dobro a raison, il est POSSIBLE que ton code plante, donc ça arrivera. Il faut modifier en fonction de cette éventualité. Et puis il a raison aussi pour le nettoyage du topic ;)

Re: Methode et beauté du code

Publié : mar. 11/sept./2012 15:44
par Mindphazer
Dobro a écrit : mais , il y a quand meme une chose qui est loin d'etre parfait dans ta boucle c'est ceci :

que ce passe t'il si dès le debut il sort 2 fois de suite le chiffre 1 ??

ben tu diminue "I" 2 fois ... ta boucle se retrouve a -1
et je ne sais pas pourquoi , mais quelque chose me dis que tu risque un plantage ...
Ben non, chaque fois que le random sort 1, i est décrémenté de 1, puis en passant dans le next, il est incrémenté de 1.... donc i ne change pas quand random(10) = 1

Re: Methode et beauté du code

Publié : mar. 11/sept./2012 15:44
par SPH
Plantage pas possible selon moi :

Code : Tout sélectionner

For i=1 To 100
If Random(10)=1
i-5
EndIf
Debug i
Next

Re: Methode et beauté du code

Publié : mar. 11/sept./2012 15:53
par Backup
Mindphazer a écrit : Ben non, chaque fois que le random sort 1, i est décrémenté de 1, puis en passant dans le next, il est incrémenté de 1.... donc i ne change pas quand random(10) = 1
tu t'amusera a faire Point(0,0) ;)

là en l'etat sa boucle n'as aucun intérêt ..
je ne critique pas ici les 5 ligne de codes , je critique la méthode ...

imagine que tu veuille utiliser un truc dans le genre pour lire les points d'une image , ou pour les ecrires ...
le i a un moment T aura bien la valeur 0 AVANT le NEXT

du coup comme il n'y a pas de control , ça risque le plantage ...

de plus son deuxieme exemple retire 5 !!
alors bien sur apparemment Fred a prevu le coup et ça part dans les chiffres négatif

mais bon , un comportement comme ça n'est pas forcement prévisible

Code : Tout sélectionner


For i=1 To 100
	i=i-5
	Debug i  ; on part dans les chiffres négatif ..... 
Next i
; EPB
c'est de la bidouille .... :)
ça reviens a faire -4

Re: Methode et beauté du code

Publié : mar. 11/sept./2012 15:57
par Mindphazer
Dobro a écrit : imagine que tu veuille utiliser un truc dans le genre pour lire les points d'une image , ou pour les ecrires ...
le i a un moment T aura bien la valeur 0 AVANT le NEXT
Oui, forcément, là, je suis d'accord avec toi.
Le tout étant de savoir ce qu'il y a (ou pas) entre le i-1 et le NEXT...

Re: Methode et beauté du code

Publié : mar. 11/sept./2012 16:06
par Backup
oui :)

Re: Methode et beauté du code

Publié : lun. 24/sept./2012 11:53
par Golfy
Pour revenir à "beauté du code", je trouve dommage que les éditeurs n'affiche pas une sorte de "carte" (type carte heuristique...) avec les liens vers les différents sources et ainsi voir où se trouve le code "principal" celui dans lequel se trouve la boucle principale.
Je parle d'un affichage graphique permettant d'embrasser le projet d'un seul regard !

Idéalement, il permettrait de visualiser les procédures de ressources (ou librairies), le code pour les formes, etc.

En effet, sur mes projets de domotique, j'ai une sorte de librairie (pourrait-être un PBI ?) contenant les procédures liées à la domotique (donc exploitable uniquement avec cette domotique).
Ensuite, j'essaye de générer mes fenêtres à partir de Form Designer (bientôt Visual Designer ?) qui me génère 2 fichiers (common et xxxx).
Enfin, les procédures travaillant sur des éléments externes (fichiers, etc.) mais qui n'ont rien de nécessaire ou définitif.

Sinon, comme tous j'essaye d'utiliser les commentaires (et les [;-] ), et en entête, outre les infos date/modifs/... je mets une variable globale de version : ainsi quand le programme apparaît, je connais de suite sa version (ou si je retrouve un code sur plusieurs archives...)

Ci-dessous, le 'pire' (ou meilleur) entête que j'ai fait :

Code : Tout sélectionner

; ************************************************************************************
; * T&o & T&a                                    Velbus communication                *
; * Author : D. Roumanet                         Date : 31/10/2011                   *
; * e-mail : golfy @ free . fr                   Ver. : Purebasic : 4.60)            *
; ************************************************************************************
; * [+] Ajout      [*] Amélioration     [.] Correction     [-] Suppression           *
; ************************************************************************************
; v1.10 ------------------------------------------------------------------- 03/06/2012
;      (*) Graphiques automatiques (moyenne et écart + gestion taille)
;
; v1.09 ------------------------------------------------------------------- 03/04/2012
;      (+) Scan de nom des parties des modules
;      (*) correction bug dans procédure HEXA2
;
; v1.08 ------------------------------------------------------------------- 14/04/2012
;      (*) Déplacement fichiers stats temp dans... /Stats/
;      (+) Possibilité relais, volets et dimmer (Blink, Open/Close/Intermediate...)
;      (*) Formulaire de saisie d'évènement (réveil)
;
; v1.07 ------------------------------------------------------------------- 09/03/2012
;      (*) Page web auto-refresh + ajout date
;      (*) Liste pour GraphTemp (évite plantage en cas de mauvaise saisie)
;      (.) Correction bug date pour fichier (procedure writetempfile)
;
; v1.06 ------------------------------------------------------------------- 04/03/2012
;      (+) Edition evénements possible (ListIconGadget)
;
; v1.05 ------------------------------------------------------------------- 19/01/2012
;      (+) Ecriture page web dynamique et graphique dynamique
;

Les temps changent

Publié : lun. 12/mai/2014 21:29
par falsam
Les temps changent: Bind (Lier une action à un événement particulier) devient à la mode et ce n'est que le début du changement :mrgreen:

Un exemple de code très simple. BindEvent() et BindGadgetEvent() permettent de passer d'autres paramètres facultatifs (Voir aide)

Code : Tout sélectionner

Enumeration Window
  #MainForm
EndEnumeration

Enumeration Gadgets
  #String1
  #Button1
  #Button2
  
EndEnumeration

Procedure OnEventString1()
  Select EventType()
    Case #PB_EventType_Focus
      Debug "Focus"
      
    Case #PB_EventType_Change
      Debug "Change"
      
    Case #PB_EventType_LostFocus
      Debug "Lost Focus"
      
  EndSelect
EndProcedure

Procedure OnclickButton1()
  Debug "OnclickButton1()"
EndProcedure

Procedure OnclickButton2()
  Debug "OnclickButton2()"
EndProcedure

Procedure Stop()
  End
EndProcedure

If OpenWindow(#MainForm, 0, 0, 800, 600, "Bind de la mort")
  TextGadget(#PB_Any, 20, 30, 80, 20, "String1")
  StringGadget(#String1, 100, 30, 200, 20, "")
  
  ButtonGadget(#Button1, 700, 30, 80, 20, "Button1")
  ButtonGadget(#Button2, 700, 60, 80, 20, "Button1")
  
  
  ;Evenements
  BindEvent(#PB_Event_CloseWindow, @Stop())
  
  BindGadgetEvent(#String1, @OnEventString1()) 
  BindGadgetEvent(#Button1, @OnClickButton1())
  BindGadgetEvent(#Button2, @OnclickButton2())
    
  ;Cette partie sera peut être remplacer par une fonction plus simple
  Repeat: WaitWindowEvent() : ForEver
EndIf