Methode et beauté du code

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Methode et beauté du code

Message 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.
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Methode et beauté du code

Message 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....
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Methode et beauté du code

Message 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
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

Re: Methode et beauté du code

Message 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.
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Methode et beauté du code

Message 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 ?
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Methode et beauté du code

Message 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
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Methode et beauté du code

Message 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
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Methode et beauté du code

Message 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 ;)
Avatar de l’utilisateur
Mindphazer
Messages : 635
Inscription : mer. 24/août/2005 10:42

Re: Methode et beauté du code

Message 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
Bureau : Win10 64bits
Maison : Macbook Pro M1 14" SSD 512 Go / Ram 16 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Methode et beauté du code

Message 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
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Methode et beauté du code

Message 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
Avatar de l’utilisateur
Mindphazer
Messages : 635
Inscription : mer. 24/août/2005 10:42

Re: Methode et beauté du code

Message 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...
Bureau : Win10 64bits
Maison : Macbook Pro M1 14" SSD 512 Go / Ram 16 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Methode et beauté du code

Message par Backup »

oui :)
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Re: Methode et beauté du code

Message 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
;
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Les temps changent

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre