Xartrick
Hors ligne
Moderateur
GTAOnline Addict

C & Pawn Programmer
Messages: 1206
|
 |
« 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 !main() { new a; new b; new c;
a = 1; b = 2; c = d(a, b); }
public d(e, f) { return e + f; } 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 !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 ...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'espacementL'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 !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 !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 !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 variablesL'appellationCette 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 ...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.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'affectationCette 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.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.#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éveloppementParticipants- Xartrick
- La déclaration des variables
|
|
|
|
« Dernière édition: 05 Octobre 2011 à 15:09:34 par Xartrick »
|
Journalisée
|
|
|
|
|
aerotun
|
 |
« Répondre #1 le: 16 Mai 2011 à 22:14:38 » |
|
GG pour le tuto
PS : Si on le met sa fait quoi de plus ? LOL
|
|
|
|
|
Journalisée
|
|
|
|
Xartrick
Hors ligne
Moderateur
GTAOnline Addict

C & Pawn Programmer
Messages: 1206
|
 |
« Répondre #2 le: 16 Mai 2011 à 22:15:30 » |
|
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é !
|
|
|
|
|
Journalisée
|
|
|
|
cristab
Hors ligne
Admin V.I.P
GTAOnline Legend

Messages: 7333
|
 |
« Répondre #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 ou alors cela 
|
|
|
|
« Dernière édition: 16 Mai 2011 à 22:20:52 par cristab »
|
Journalisée
|
|
|
|
|
aerotun
|
 |
« Répondre #4 le: 16 Mai 2011 à 22:25:50 » |
|
Eu ouais mais j'ai toujours pas pigé cela sére à quoi 
|
|
|
|
|
Journalisée
|
|
|
|
|
ghm94
|
 |
« Répondre #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.
|
|
|
|
|
Journalisée
|
|
|
|
|
aerotun
|
 |
« Répondre #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 
|
|
|
|
|
Journalisée
|
|
|
|
cristab
Hors ligne
Admin V.I.P
GTAOnline Legend

Messages: 7333
|
 |
« Répondre #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 ....
|
|
|
|
|
Journalisée
|
|
|
|
Ssk
Développeur d'Open SA-MP
Hors ligne
Sous-admin
GTAOnline Legend

Open-SA-MP - Unlimited Experience
Messages: 3726
 
|
 |
« Répondre #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 ^^
|
|
|
|
|
Journalisée
|
|
|
|
cristab
Hors ligne
Admin V.I.P
GTAOnline Legend

Messages: 7333
|
 |
« Répondre #9 le: 16 Mai 2011 à 23:06:29 » |
|
Ssk il a juste a lire ^^ Ici, j'ai malencontreusement oublié une accolade, mais où cela ?! Pour le trouver, nous allons ranger le code !
|
|
|
|
|
Journalisée
|
|
|
|
Syg
Expert programmeur C/C++/PAWN
Hors ligne
Administrateur
GTAOnline Legend

The GTAOnline Jesus
Messages: 3760
|
 |
« Répondre #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
|
|
|
|
|
Journalisée
|
|
|
|
cristab
Hors ligne
Admin V.I.P
GTAOnline Legend

Messages: 7333
|
 |
« Répondre #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
|
|
|
|
« Dernière édition: 17 Mai 2011 à 00:27:49 par cristab »
|
Journalisée
|
|
|
|
S!m
Hors ligne
Moderateur
GTAOnline Fan Boy

Messages: 2260
|
 |
« Répondre #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++
|
|
|
|
|
Journalisée
|
|
|
|
Xartrick
Hors ligne
Moderateur
GTAOnline Addict

C & Pawn Programmer
Messages: 1206
|
 |
« Répondre #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.
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 !
|
|
|
|
|
Journalisée
|
|
|
|
Syg
Expert programmeur C/C++/PAWN
Hors ligne
Administrateur
GTAOnline Legend

The GTAOnline Jesus
Messages: 3760
|
 |
« Répondre #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
|
|
|
|
|
Journalisée
|
|
|
|
|