Décision sur syntaxe

Yop, dans ma lib DataPackDSL, j'ai un dilemne pour définir la syntaxe de plusieurs DSLs, ils ont exactement la même syntaxe, c'est juste les paramètres et nom de fonctions qui change quoi, par exemple pour les DensityFunctions, je peux créer des densityFunction comme ça :
val maFonction = densityFunction("ma_fonction") {
// Là je dois retourner un DensityFunctionType
// Par exemple abs() en retourne un
abs(2.0)
}
val maFonction = densityFunction("ma_fonction") {
// Là je dois retourner un DensityFunctionType
// Par exemple abs() en retourne un
abs(2.0)
}
Le souci c'est que si j'appelle abs() plusieurs fois, je sais pas trop quoi faire... Est-ce que : - Je l'ignore sauf le dernier appel ? (ce qui se fait actuellement) - Je renvoie une erreur ? J'ai aussi une syntaxe avec un builder à part :
densityFunctions {
val maFonction1 = abs("ma_fonction", 2.0)
}

val maFonction2 = densityFunctionsBuilder.abs("ma_fonction", 2.0)
densityFunctions {
val maFonction1 = abs("ma_fonction", 2.0)
}

val maFonction2 = densityFunctionsBuilder.abs("ma_fonction", 2.0)
Ça évite le problème mais c'est plus verbeux :/ Sachant que dans le JSON y'a qu'un seul DensityFunctionType par fichier, vous me conseillez quoi ? Renvoyer une erreur si abs() est appelé plusieurs fois dans le premier style ? Ou utiliser le builder direct ?
11 Replies
Unknown User
Unknown User14mo ago
Message Not Public
Sign In & Join Server To View
Ayfri
Ayfri14mo ago
oui oui, c'est pour ça que les autres sont ignorés actuellement, mais dans ma lib y'a plein de fois où chaque ligne compte, et là ça pourraît être confu, fin je sais pas y'a que moi qui l'ait utilisé jusque là donc je connais tout par cœur x)
Unknown User
Unknown User14mo ago
Message Not Public
Sign In & Join Server To View
Ayfri
Ayfri14mo ago
ben par exemple pour des commandes tu vas faire
function("my_function") {
say("coucou les petits")
teleport(randomPlayer(), randomPlayer())
kill(allEntities {
type = EntityTypes.CREEPER
})
}
function("my_function") {
say("coucou les petits")
teleport(randomPlayer(), randomPlayer())
kill(allEntities {
type = EntityTypes.CREEPER
})
}
Puis t'as certains DSLs où les fichiers JSONs peuvent accueillir plusieurs entrées, genre
predicate("mon_predicate") {
randomChance(0.5)
randomChance(0.8)
}
predicate("mon_predicate") {
randomChance(0.5)
randomChance(0.8)
}
Là ça va faire en sorte que le prédicat soit validé uniquement si les 2 conditions sont validées Mais dans mon exemple de mon premier message, c'est pas possible de mettre plusieurs entrées, c'est 1 par fichier JSON, mais du coup faut pas que les gens soient confus etc, et j'ai la flemme de full documenter tout quoi
Unknown User
Unknown User14mo ago
Message Not Public
Sign In & Join Server To View
Ayfri
Ayfri14mo ago
Ouais j'avais fait ça au début pour certains, mais je trouve ça plus moche au final, genre des fois t'avais des trucs du genre
densityFunction("mes_couilles", oldBlendedNoise {
xzScale = 2.0
...
})
densityFunction("mes_couilles", oldBlendedNoise {
xzScale = 2.0
...
})
Le }) je déteste x) On dirait du JS mdrr
Unknown User
Unknown User14mo ago
Message Not Public
Sign In & Join Server To View
Ayfri
Ayfri14mo ago
Mais au final je me retrouve dans une situation où chuis obligé de faire une lambda en dernier argument, parce que j'avais oublié que tous les JSONs tu peux aussi choisir leur namespace, le dossier où ils vont être créés D'habitude quand tu fais un pack tu mets tout dans ton dossier, mais pour certains cas ou pour réécrire les fichiers de Minecraft de base par exemple, tu mets la namespace minecraft, du coup ça se retrouve dans .minecraft/saves/{ton_monde}/datapacks/{ton_pack}/data/{ta_namespace}/density_functions/mes_couilles.json Donc chuis obligé de finir avec une lambda où en tant que receiver (le this) y'a la classe DensityFunction, qui extends de Generator (jusque là c'était le cas, Generator ça a une méthode abstraite generateJson pour définir comment sérialiser), et maintenant les Generator ont une propriété namespace C'est grave complexe à expliquer comme t'as vu mais en gros, chuis obligé d'avoir une lambda à la fin
Unknown User
Unknown User14mo ago
Message Not Public
Sign In & Join Server To View
Ayfri
Ayfri14mo ago
Mais du coup tu penses que c'est quoi le mieux @Loockeeer ?
Unknown User
Unknown User14mo ago
Message Not Public
Sign In & Join Server To View
Want results from more Discord servers?
Add your server