Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 19/01/10 22:52 Sujet du message: Trucs, astuces et plus si affinités
Pour éviter d'encombrer d'autres threads déjà bien assez imposants.
On postera ici tout ce qui concerne le codage en général, et je vais commencer par supprimer cette vilaine utilisation de i2struct. _________________
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 19/01/10 23:07 Sujet du message:
Jass:
private function i2struct takes integer i returns s_IndSum
return i
endfunction
//=================================================
function IndSum takes unit summon returns s_IndSum
if( summon==null )then
return 0
endif
if( not TABLE.exists(summon) )then
set TABLE[summon] = s_IndSum.create(summon)
else
call TABLE.destroy(i2struct(TABLE[summon]))
set TABLE[summon] = s_IndSum.create(summon)
endif
return i2struct(TABLE[summon])
endfunction
Jass:
//codecodecode
return s_IndSum(TABLE[summon])
Les instances de struct ne sont ni plus ni moins que des entiers, simplement le compilateur vJass fait la distinction entre une instance de struct et un simple entier, et c'est tant mieux ca évite des erreurs bêtes de code.
Quand tu fais structName(entier), le code compilé est au final que l'entier en lui même, mais comme tu as spécifié que l'entier pouvait être considéré comme une instance de structName, le compilateur vJass fait un grand sourire.
Au lieu de structName tu peux utiliser thistype dans une method de struct, c'est encore plus sexy. _________________
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 19/01/10 23:36 Sujet du message:
static method create takes ... returns thistype
Permet de définir soit même ce qui se passe à la création d'une instance de struct.
On peut par ex prendre un argument unité et booléen et définir (takes ...) et définir les membres de la struct aux valeurs ainsi spécifiées (suis je clair hmm ?)
Ca permet d'avoir le contrôle total de la création d'une struct, tout en gardant la syntaxe universelle .create.
La plupart du temps même si à priori j'en ai pas besoin je la déclare quand même, car à part quelques lignes de plus dans l'éditeur, le script de la map est rigoureusement identique.
Et s'il s'avère que dans ma librairie/scope je tapes plusieurs fois .create(), je code dans cette méthode tout le nécessaire, et je n'ai plus qu'à taper .create(), une source d'erreur un moins, un code plus lisible yeah.
.allocate() alloue une instance de struct, on pourrait à la place utiliser son propre allocateur de struct mais comme je l'ai déjà posté ca semble bien inutile :p _________________
En fait dans mes libaries utilisant les Tables, le static method pourrait remplacer la method Link à chaque fois, si j'ai bien compris? (Dans toutes mes libraries avec Table, la method Link est celle que j'appelle en premier en général). _________________
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 19/01/10 23:50 Sujet du message:
Apocalypse a écrit:
En fait dans mes libaries utilisant les Tables, le static method pourrait remplacer la method Link à chaque fois, si j'ai bien compris? (Dans toutes mes libraries avec Table, la method Link est celle que j'appelle en premier en général).
Si tu l'appelles juste après avoir créé une instance oui, mais c'est bizarre dans ta première librairie je ne vois pas d'appel de la method Link, pourtant ta struct est private ... _________________
//=================================================
method Link takes unit master returns nothing
set .master = master
set .ti = NewTimer()
call SetTimerData( .ti, this )
call TimerStart( .ti, TIMEOUT, true, function runtimerorder )
endmethod
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 20/01/10 00:04 Sujet du message:
Ouai bon j'ai la flemme pour ce soir mais faudra améliorer cela.
As tu compris en général ce qu'est une static method et une method normale, ou need explications ? _________________
Method normal: sorte de fonction, sauf que c'est compris au sein de la struct (pas besoin d'appeler celle-ci comme pour une fonction avec une variable locale), et qu'on peut les placer comme on veut contrairement aux fonctions (si A est au dessus de B, A peut quand même appeler B, les fonctions, non)
Static Method : en gros c'est qu'au lieu de faire mastruct.Create avec la struct ayant par exemple comme variables une unité, avec le static method, je peux directement affecter quelle unité sera sur la variable au moment de la création de la struct.
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 20/01/10 00:17 Sujet du message:
Apocalypse a écrit:
Method normal: sorte de fonction, sauf que c'est compris au sein de la struct (pas besoin d'appeler celle-ci comme pour une fonction avec une variable locale), et qu'on peut les placer comme on veut contrairement aux fonctions (si A est au dessus de B, A peut quand même appeler B, les fonctions, non)
Ouai bah justement l'ordre des methods à une importance mais on en parlera demain, je devrais te provoquer de bonnes suées à fixer ton code héhé.
J'ai pas compris ce que tu voulais dire entre parenthèses.
Mais simplement une method est une fonction normale mais qui a besoin d'une instance de struct.
Citation:
Static Method : en gros c'est qu'au lieu de faire mastruct.Create avec la struct ayant par exemple comme variables une unité, avec le static method, je peux directement affecter quelle unité sera sur la variable au moment de la création de la struct.
C'est ça?
C'est un cas particulier que tu décrits.
Mais oui une static method est une fonction normale, elle n'utilise pas une instance de struct, c'est évident que create doit etre static, car on y créé une instance en partant de rien. _________________
Toutes les heures sont au format GMT + 1 Heure Aller à la page 1, 2, 3, 4, 5, 6, 7Suivante
Page 1 sur 7
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum