Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
Connexion avec identifiant, mot de passe et durée de la session

 
avancée

254676 Messages dans 14036 Fils de discussion- par 6616 Membres - Dernier membre: louloufcb

22 Mai 2012 à 16:00:32
GTAOnline.frSan Andreas MultiplayerScripting SA-MP [Pawn center]Tutoriels et références SA:MP (Modérateurs: S!m, Xartrick)La programmation optimisée
Pages: [1] 2   Bas de page
Imprimer
Auteur Fil de discussion: La programmation optimisée  (Lu 988 fois)
0 Membres et 1 Invité sur ce fil de discussion.
Xartrick
Hors ligne Hors ligne


Moderateur
GTAOnline Addict
*

C & Pawn Programmer

Messages: 1206


WWW
« 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é)
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é)
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é)
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 !


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é)
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é)
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)
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)
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)
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)
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)
#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
« 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 Hors ligne


Moderateur
GTAOnline Addict
*

C & Pawn Programmer

Messages: 1206


WWW
« Répondre #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é !
Journalisée

cristab
Hors ligne 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

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

Code:
new a,
    b,
    c;
Huh?
« 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  LMAO
Journalisée
ghm94
Hors ligne Hors ligne


GTAOnline Big Member
*

Messages: 494






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 »

Code:
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 Tire la langue
Journalisée
cristab
Hors ligne 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 Hors ligne


Sous-admin
GTAOnline Legend
*

Open-SA-MP - Unlimited Experience

Messages: 3726


WWW



sasuke78200

« 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






Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog
cristab
Hors ligne 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 ^^

Citation
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 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

Courtesy of GtaManiac
cristab
Hors ligne 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 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 Hors ligne


Moderateur
GTAOnline Addict
*

C & Pawn Programmer

Messages: 1206


WWW
« 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.

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 !
Journalisée

Syg
Expert programmeur C/C++/PAWN
Hors ligne 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

Courtesy of GtaManiac
Pages: [1] 2   Haut de page
Imprimer
Aller à:  

Theme créé par padexx et modifié par GTAOnline.fr
Page générée en 0.608 secondes avec 24 requêtes.
Forum GTAOnline.fr 2.0 | Design par : Lalu et GtaManiac
Merci a toute la communaute pour son support !
Copyright © 2004-2012 - GTAOnline.fr | GTAPro.com | Contact