• 28 Mars 2024, 12:24:48


Auteur Sujet: La programmation optimisée  (Lu 12900 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
La programmation optimisée
« le: 16 Mai 2011, 21:53:26 »
Salutations.

Dans ce tutoriel qui ne sera d'ailleurs JAMAIS fini, je vais, ou plutôt nous allons vous apprendre ou du moins, vous aidez à programmer dans les meilleurs conditions.
Le nous fait référence à vous, à moi, car tous le monde peux y participer, à condition d'être dans le sujet et que votre contribution soit utile !
Pour commencer, je vais faire une petite introduction pour vous expliquez, de mon point de vue, la programmation optimisée.
Une bonne partie des notions de ce tutoriel ont déjà était abordé sur le forum par Syg ou encore Sim, je vous encourage d'ailleurs d'aller consulter leurs tutoriels !

Introduction

La programmation optimisée est avant tous, une gestion correct de son code, j'entends par cela, la bonne aération de son code et la compréhension de ce dernier.
Les premiers articles seront consacrés à la programmation dans les meilleurs conditions.
Ce tutoriel sera dédié à tous le monde, car dans ce tutoriel, nous allons essayer de reprendre certaines bases pour bien se comprendre.
Je vous préviens, certaines notions seront misent de côté, car il ne faut pas non plus ne rien connaître.
Donc, le sujet de ce tutoriel, vous l'aurez compris, est la programmation optimisée.

L'indentation

L'indentation permet d'aérer son code pour le rendre plus fluide à la lecture, bien des erreurs peuvent être éviter grâce à cette pratique, qui est d'ailleurs vital si vous voulez travailler dans les meilleurs conditions possibles !
Bien, maintenant que cela est dit, comment indentons-nous un code ? Eh bien, un exemple, puis une explication !


Code: (Code non-indenté) [Sélectionner]
main()
{
new a;
new b;
new c;

a = 1;
b = 2;
c = d(a, b);
}

public d(e, f)
{
return e + f;
}

Code: (Code indenté) [Sélectionner]
main()
{
new a;
new b;
new c;

a = 1;
b = 2;
c = d(a, b);
}

public d(e, f)
{
return e + f;
}

Comme vous pouvez le voir, les deux codes suivants sont similaires, ils ne servent pas à grand chose, certes, mais sont un très bon exemple !
Ce qui change, c'est que nous ajoutons une tabulation à chaque fois que nous entrons dans une accolade, donc plus généralement, dans une fonction, une condition, ou encore, une boucle.
Cela permet de rendre plus agréable un code qui est généralement une chose pas très comestible.
À part cela, l'indentation n'a aucun effet sur la compilation du code !

Mais maintenant, un problème se pose !


Citation de: Compilateur
C:\Documents and Settings\Xartrick\exemple.pwn(40) : error 030: compound statement not closed at the end of file (started at line 3)
Pawn compiler 3.2.3664           Copyright (c) 1997-2006, ITB CompuPhase

1 Error.

Voici le code ...

Code: (Code non-indenté) [Sélectionner]
main()
{
new a;
new b;
new c;

a = 1336;
b = 1337;
c = 1338;

if(a == b)
{
if(b == c)
{
if(c == a)
{

}
if(a > b)
{
if(b > c)
{
if(c > a)
{
}
}
}
if(a < b)
{
if(b < c)
{
if(c < a)
{

}
}
}
}
}

Ici, j'ai malencontreusement oublié une accolade, mais où cela ?!
Pour le trouver, nous allons ranger le code !


main()
{
new a;
new b;
new c;

a = 1336;
b = 1337;
c = 1338;

if(a == b)
{
if(b == c)
{
if(c == a)
{
}

if(a > b)
{
if(b > c)
{
if(c > a)
{
}
}
}

if(a < b)
{
if(b < c)
{
if(c < a)
{
}
}
}
}
}

Et oui, il manquait une accolade à la fin, d'un seul coup d'œil, nous l'avons vue !
Pour l'indentation, cela sera tout !


L'espacement

L'espacement du code, tous comme l'indentation, n'a aucun intérêt si ce n'est que d'avoir un code clair et compréhensible.
Pour cette exemple, je vais combiner l'indentation et l'espacement du code !


Code: (Code non-indenté et non-espacé) [Sélectionner]
main(){new a;new b;new c;
a=1;b=2;c=d(a,b);
}
public d(e,f){return e+f;}

Je prends bien évidement un cas extrêmes, mais des personnes programmes comme ceci, et c'est pas joli à voir !
Et maintenant, une forme correct de ce code avec l'indentation et l'espacement correct !


Code: (Code indenté et espacé) [Sélectionner]
main()
{
new a;
new b;
new c;

a = 1;
b = 2;
c = d(a, b);
}

public d(e, f)
{
return e + f;
}

Donc, l'espacement du code demande seulement d'espacer au maximum les choses qui sont différente, ici, nous séparons les déclarations des affectations.
Les opérateurs sont également espacé !
Il faut savoir que certains programmeur pousse le vice jusqu'au bout, voyez cet exemple !


Code: (Code indenté et espacé excessivement) [Sélectionner]
main ()
{
new a ;
new b ;
new c ;

a = 1 ;
b = 2 ;
c = d ( a , b ) ;
}

public d ( e , f )
{
if ( e > f )
{
   return e + f ;
}
else if ( f < e )
{
return f + e ;
}

return 0 ;
}

La déclaration des variables

L'appellation

Cette partie est seulement une préférence personnelle, ceci n'est pas à appliquer obligatoirement !

Comme vous le savez surement déjà, le nom d'une variable doit être alpha-numérique (A-Za-z0-9) et doit toujours commencer par une lettre
Voici quelques déclaration de variable ...


Code: (Déclaration) [Sélectionner]
new a; // Déclaration correct
new 8; Déclaration incorrect (commence par un nombre)
new a8; // Déclaration correct
new 8a; // Déclaration incorrect (commence par un nombre)
new a8é; // Déclaration incorrect (é)
new a8e; // Déclaration correct

Pour ma part, j'ai adopté un petit système d'appelation des variables pour pouvoir les identifier au mieux.
J'utilise un système de préfixe pour identifier les différents types de variables, les voici.

i = Integer = Nombres
b = Boolean = Booléen (0 ou 1)
f = Float = Nombres à virgule
s = String = Tableau de char (chaîne de caractères)
a = Array = Tableau


Ainsi, voici plusieurs déclarations de variables et les affectations associés.


Code: (Déclaration) [Sélectionner]
new iVariable = 1337; // Variable contenant un nombre entier
new bVariable = 0; // Variable booléene
new fVariable = 13.37; // Variable contenant un nombre à virgule
new sVariable[100] = "Xartrick"; // Variable contenant une chaîne de caractère
new aVariable[100] = 1; // Variable contenant plusieurs valeurs (numéral)

Le nom d'une variable n'affecte pas la façon dont elle fonctionne, elle n'est utilise que visuellement !

L'affectation

Cette partie est facultative étant donné que cette partie n'est que d'ordre général.

Maintenant, la partie la plus intéressante, l'affectation d'une valeur à une variable.
Ici, voici un tableau de taille 10000.


Code: (Déclaration d'un tableau) [Sélectionner]
new aArray[10000];
Beaucoup de langage n'affecte pas de valeur de base à leurs variables, ceci est très générant car nous pouvons trouver des valeurs que nous ne souhaitons pas !
Pour m'en rendre compte, j'ai simplement codé un code qui créer un tableau de cette taille et qui vérifie toutes les valeurs de ce tableau et si elle n'est pas égal à 0, on l'inscrit sur la console.


Code: (Test de valeur) [Sélectionner]
#include <a_samp>

main()
{
new aArray[10000];
new i = 0;

for (i = 0; i < 10000; i++)
{
if (aArray[i] != 0)
{
printf("L'indice %i du tableau vaut %i !", i, aArray[i]);
}
}
}

Résultat, aucune entré, donc toutes la variables sont initialisés à 0 lors de leurs déclarations !
C'est le cas pour le PAWN mais ceci n'est pas la cas pour le C, par exemple !


Exemple de code optimisé et non-optimisé

Code non-optimisé: Pastebin GTAOnline.fr - Outil de collaboration dans le développement
Code optimisé: Pastebin GTAOnline.fr - Outil de collaboration dans le développement


Participants

  • Xartrick
    • L'indentation
    • L'espacement
    • La déclaration des variables
« Modifié: 05 Octobre 2011, 15:09:34 par Xartrick »

aerotun

  • Invité
Re : La programmation optimisé
« Réponse #1 le: 16 Mai 2011, 22:14:38 »
GG pour le tuto

PS : Si on le met sa fait quoi de plus ? LOL

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : La programmation optimisé
« Réponse #2 le: 16 Mai 2011, 22:15:30 »
Citation de: Xartrick
Cela permet de rendre plus agréable un code qui est généralement une chose pas très comestible.
Appart cela, l'indentation n'à aucun effet sur la compilation du code !

Sinon, le tutoriel n'est absolument par terminé !

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : La programmation optimisé
« Réponse #3 le: 16 Mai 2011, 22:18:31 »
idée trés originale Gg


je commence a mieux comprendre ton text perso "Perfectionniste" on va t'appeler the Perfectionniste :p

temps que je te tien ^^ est t'il mieux de faire cela

new a;
new b;
new c;
ou alors cela

new a,
    b,
    c;
???
« Modifié: 16 Mai 2011, 22:20:52 par cristab »
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

aerotun

  • Invité
Re : La programmation optimisé
« Réponse #4 le: 16 Mai 2011, 22:25:50 »
Eu ouais mais j'ai toujours pas pigé cela sére à quoi  :lmfao

Hors ligne ghm94

  • *
  • Grand Banditisme
  • Messages: 886
    • Voir le profil
Re : La programmation optimisé
« Réponse #5 le: 16 Mai 2011, 22:28:02 »
C'est surtout pour toi, quant tu lis ton code tu t'y retrouveras plus facilement par exemple, ou même si tu le partage sa permet au autre de mieux le lire.

aerotun

  • Invité
Re : La programmation optimisé
« Réponse #6 le: 16 Mai 2011, 22:32:16 »
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(122) : warning 219: local variable "b" shadows a variable at a preceding level
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(123) : warning 219: local variable "c" shadows a variable at a preceding level
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(159) : warning 217: loose indentation
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(159) : error 029: invalid expression, assumed zero
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(159) : error 017: undefined symbol "d"
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(161) : error 017: undefined symbol "e"
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(161) : error 079: inconsistent return types (array & non-array)
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(164) : warning 225: unreachable code
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(164) : error 029: invalid expression, assumed zero
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(164) : error 017: undefined symbol "SetPlayerToTeamColor"
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(165) : error 029: invalid expression, assumed zero
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(165) : error 017: undefined symbol "SetupPlayerForClassSelection"
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(166) : error 029: invalid expression, assumed zero
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(166) : error 017: undefined symbol "SetPlayerTeamFromClass"
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(167) : error 029: invalid expression, assumed zero
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(167) : error 017: undefined symbol "KillsInfo"
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(172) : error 029: invalid expression, assumed zero
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(172) : error 004: function "OnFilterScriptExit" is not implemented
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(174) : error 079: inconsistent return types (array & non-array)
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(179) : warning 225: unreachable code
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(180) : error 001: expected token: ";", but found "{"
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(188) : error 029: invalid expression, assumed zero
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(188) : error 004: function "OnGameModeInit" is not implemented
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(218) : warning 217: loose indentation
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(273) : warning 217: loose indentation
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(454) : error 079: inconsistent return types (array & non-array)
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(457) : warning 225: unreachable code
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(457) : error 029: invalid expression, assumed zero
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(457) : error 004: function "OnGameModeExit" is not implemented
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(464) : error 079: inconsistent return types (array & non-array)
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(467) : warning 225: unreachable code
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(467) : error 029: invalid expression, assumed zero
C:\Users\Miguel\Desktop\Nouveau dossier\gamemodes\cod.pwn(467) : error 004: function "OnPlayerRequestClass" is not implemented

Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


26 Errors.

Marche pas trop le truc :P

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : La programmation optimisé
« Réponse #7 le: 16 Mai 2011, 22:43:08 »
relit le tuto a moin qu'il y est trop de mot dans ce cas on peu tenter d'en sortir un en image ....
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : La programmation optimisé
« Réponse #8 le: 16 Mai 2011, 22:47:06 »
Lis la signification de tes warnings, et tu pourra régler tes problèmes seuls ^^

Sympa de ta part Xartrick, je déplace le topic dans Tuto mais pour qu'il y reste tu doit un peu plus l'étoffer ^^



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : La programmation optimisé
« Réponse #9 le: 16 Mai 2011, 23:06:29 »
Ssk il a juste a lire ^^

Citer
Ici, j'ai malencontreusement oublié une accolade, mais où cela ?!
Pour le trouver, nous allons ranger le code !
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : La programmation optimisé
« Réponse #10 le: 17 Mai 2011, 00:11:26 »
Xartrick,

Je réponds ici, un peu crument, à la question que tu me poses dans un autre topic (Je cite : "j'aimerais bien avoir un retour de ta part.")

Je veux pas faire mon chieur mais j'ai déjà dit l'essentiel sur l'indentation (et d'autres sujets) dans ce topic (http://www.gtaonline.fr/forums/index.php/topic,6250.0.html) il y 2 ans et demie environs.

Et le perfectionnisme que tu semble affectionner aurait du te pousser à te relire pour corriger les abominables fautes d'orthographe que tu as laissées un peu partout.

Et enfin, pour en venir au sujet, la programmation optimisée n'a rien à voir avec l'indentation (ou les autres sujets dont je parle dans le topic que je cite).

Le sujet est bon car il n'a pas été abordé dans cette partie du forum et car c'est un sujet intéressant.
Quand j'ai vu le titre, j'ai cru que j'allais me régaler .... mais j'ai été déçu.
Ce que tu aurais pu faire, c'est trouver tes propres exemples d'optimisation ou encore rechercher dans le forum ceux qui ont été donnés par Sim, Ssk (Sasuke), ... au fil des posts et en faire une compilation et non te lancer dans un vulgaire plagiat d'un autre sujet.

Mais surtout, si je me permet de faire mon chieur, c'est que la programmation est mon métier depuis plus de 15 ans (sans compter les 15 ans où j'ai fait ça pour mon plaisir).

Donc, gardons le sujet (qui risque d'être passionnant) et repartons sur de bonnes base.
Et d'ailleurs, je me ferais une joie d'être un des participants.

++
Syg
Courtesy of GtaManiac

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : La programmation optimisé
« Réponse #11 le: 17 Mai 2011, 00:25:51 »
Je pense pas quil es tenter de plagier le tien mais en gros il va tout reunir en un seul topic je pense qua la suite il va parler des factorisation puis lutilisation des string ect ect jespere juste quil a vu tes tuto ce de raf et sim ainsi que vos astuce et les recommandation de Ssk dans plusieurs topic


peu etre aussi voir a interpreter les recopandation de Yless
« Modifié: 17 Mai 2011, 00:27:49 par cristab »
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : La programmation optimisé
« Réponse #12 le: 17 Mai 2011, 01:18:47 »
Salut,

c'est un peu l'idée que j'avais en tête quand j'ai commencé à écrire ce topic (que je n'ai jamais fini hélas) : http://www.gtaonline.fr/forums/index.php/topic,9575.0.html (conseils de codage ... )

Le but de départ était de donner des trucs et des conseils pour mieux coder.
Des exemples simples etc.. et aussi parlé des fonctions du langage qui ne sont pratiquement jamais exploitées.

Je serais ravi de contribuer à ce topic.

++Sim++





Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : La programmation optimisée
« Réponse #13 le: 17 Mai 2011, 07:56:09 »
Pour commencer, merci à vous pour déjà vouloir participer à cette expérience.

@cristab: Je note ton intervention, je l'inclurais au plus vite !
@Syg: Comme je le dis dans les premières lignes, ceci n'est pas de la programmation avancé mais des pré-requis pour travailler dans les meilleurs conditions.
Pour mon orthographe, excuse-moi, cela n'est pas mon fort.
Je tiens également à te dire que je n'ai en aucun cas plagié ton tutoriel, et comme je l'ai dis, ces notions ont déjà certainement était déjà vue par toi et bien d'autres.

Citation de: Xartrick
Une bonne partie des notions de ce tutoriel ont déjà était abordé sur le forum par Syg ou encore Sim, je vous encourage d'ailleurs d'aller consulter leurs tutoriels !

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : La programmation optimisée
« Réponse #14 le: 17 Mai 2011, 16:56:11 »
Le plagiat n'est pas forcément intentionnel, c'était juste un constat de ma part. Et ce n'est pas la peine de répété ce qui a déjà été dit.

Ensuite, ce topic s'intitule "La programmation optimisée". Il sera donc bien d'en parlé.
Un cours dur l'indentation ou sur les fonctions ne font pas partie de la programmation optimisée.

Je vais essayer de trouver une exemple de programmation optimisée.

++
Syg
Courtesy of GtaManiac