Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
426 connectés actuellement
29372534 visiteurs depuis l'ouverture
1900 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
Messages postés par xvw Nombre de messages référencés sur Oniromancie (non supprimés): 721 Aller à la page: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Posté dans Forum - [sondage pour le fun] Votre RPG Maker préféré ! |
xvw -
posté le 31/05/2020 à 01:36:47. (733 messages postés) |
| Citation: Mais je me suis toujours dit que, si le scipts cause des bugs au reste du jeu, etc. N'est pas difficile d'ensuite le modifier si on n'a pas les bases pour ? :0 |
Moins difficile que quand il y a un bug dans le logiciel... (ce qui arrive assez souvent, depuis MV).
Nemau, tu n'as pas compté Brikou dans la liste VXAce
|
https://xvw.lol |
Posté dans Forum - Topic de l'informatique |
xvw -
posté le 29/05/2020 à 11:40:26. (733 messages postés) |
| Oui beaucoup d'équipes arrivent à cette conclusion.
Je pense que si je devais faire une application mobile, je passerai surement par RN... ou alors Xamarin et Fsharp. (Parce que j'aime bien Fsharp)
|
https://xvw.lol |
Posté dans Forum - Topic de l'informatique |
xvw -
posté le 29/05/2020 à 11:11:36. (733 messages postés) |
| Pour le mobile, c'est honnêtement compliqué de se passer de Kotlin ou Swift (pour IOs). Par contre, en fonction de l'ambition de ton projet, j'ai l'impression que le web ou le simili-web (React-native par exemple) peut largement faire l'affaire.
|
https://xvw.lol |
Posté dans Forum - Topic de l'informatique |
xvw -
posté le 28/05/2020 à 16:01:09. (733 messages postés) |
| Je fais du Kotlin quotidiennement, au travail.
C'est un meilleur Java... ce qui n'était pas très compliqué parce que Java c'est quand même un bon gros langage de merde. Le langage est "un peu agréable à utiliser". Le problème, c'est que pour qu'il soit vraiment "bien" il faut passer par la bibliothèque Arrow (https://arrow-kt.io/). Sinon, c'est un "Scala pour enfant". Relativement facile à apprendre, mais assez frustrant.
J'ai écrit, le mois passé, un petit article sur Kotlin : https://xvw.github.io/longs/kotlin_extensions.html
Si jamais tu veux apprendre un langage intéressant, passe ton chemin, il y a clairement mieux. Si par contre, c'est comme substitut a Java... c'est un bon choix.
@Roi > C'est "plusse multiplatforme" que Java parce que tu peux aussi compiler vers le web (sans passer par Rihno qui marchait presque jamais). Et tu peux aussi compiler en Native (sans nécéssite de la JVM).
|
https://xvw.lol |
Posté dans Forum - [sondage pour le fun] Votre RPG Maker préféré ! |
xvw -
posté le 26/05/2020 à 15:37:05. (733 messages postés) |
| VXAce, mais je parle vraiment "du logiciel". En faisant abstraction qu'il est "mal multiplatforme".
Raisons:
- Meilleur "RGSS"
- Je préfère Ruby que javascript
- Contrairement à beaucoup, j'aime bien son RTP
- C'est celui que je connais le mieux.
Cependant, j'ai longuement hésité avec MV.
|
https://xvw.lol |
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
xvw -
posté le 26/05/2020 à 14:24:27. (733 messages postés) |
| Le script est vraiment mieux. Quelques petits points "stylistiques".
- Je n'utiliserais pas "old" comme préfixe pour l'alias... parce que c'est une habitude prise par beaucoup de scripteur, donc ça peut engendrer des soucis. Que dirais tu de `gif_rotate_pictures_`.
- Même si ce n'est pas dramatique, c'est assez peu standard de voir des variables avec des majuscules en Ruby. Donc `origin_x` me semble plus adéquat que `origin_X`(par exemple).
- Je localiserai toutes l'update de la rotation dans une méthode spécifique que j'appellerais dans update.
- comme en Ruby, le if est une expression (ce qui est assez rare dans d'autres langages et vraiment domage!) j'utiliserais la forme `x = if` plutot que `if ... x =` ça permettra d'éviter la répétition de angle_offset (et c'est moins chiant si un jour tu veux changer le nom de la variable par exemple).
- Le dernier point est de l'ordre du détail mais en fait : 2 * Math::PI / 360.0 est en fait égal à `Math::PI / 180.0` mais en fait ça donne une réponse vraiment très très précise pour ... "un monde de pixel". Donc tu peux te contenter de multiplier par 57.3.
|
https://xvw.lol |
Posté dans Forum - Inexistence Rebirth |
xvw -
posté le 22/05/2020 à 19:55:59. (733 messages postés) |
| Bravo !
Est-ce que tu sais s'il y aura une version Mac/Linux un jour ?
En tout cas, l'amélioration est vraiment observable. Bien joué.
|
https://xvw.lol |
Posté dans Forum - [RPG Maker MV] Supprimer des options dans le menu de départ |
xvw -
posté le 21/05/2020 à 23:40:35. (733 messages postés) |
| Le projet a reçu pas mal de publicité de Oniromancie (2 news il me semble). Et quoi qu'il en soit, il est actuellement archivé, donc sa discrétion est plutôt positif.
Citation: je connaissais l'event extender |
Ça n'a pas grand chose à voir, l'Event Extender ajoute des commandes, cependant, la confusion est compréhensible parce que le projet s'appelle RMEBuilder, et l'Event Extender a été continué sous le nom "RME". C'est principalement parce que historiquement, RMEBuilder servait à construire RME. On a rajouté la fonctionnalité des paquets distants plus tard.
Citation: mais préfèrerait peut-être développer ses propres scripts à part ? |
Justement, ça ne change pas la manière dont on développe ses scripts, ça change juste la manière dont on les distribues.
Mais bon, c'était surtout un aparté pour dire que VXace rivalise potentiellement largement avec MV pour la gestion des plugins... c'est juste que l'outil qu'on a développé (quelques années avant MV) pour la distribution de script n'a pas pris
Maintenant RMEBuilder n'est plus maintenu et donc il faut copier/coller ses scripts à la main :/
|
https://xvw.lol |
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
xvw -
posté le 20/05/2020 à 10:12:24. (733 messages postés) |
| Non, ça n'existe pas. Tu as peut être vu ça :
1
2
3
4
5
6
7
8
|
class A
alias new_method old_method
def old_method
...
end
end
|
Qui est, en terme de fonctionnement, identique à l'utilisation d'alias_method. Mais je privilégie toujours les méthodes plutôt que les instructions un peu magique (each au lieu de for par exemple). La seule exception que je fais, c'est l'utilisation de begin/rescue, if/else/etc et while/do while parce qu'on a rarement le choix.
|
https://xvw.lol |
Posté dans Forum - [FILM] Série d'une Lettre Informe [projet de long-métrage animé] |
xvw -
posté le 18/05/2020 à 12:00:34. (733 messages postés) |
| Citation:
@xvw :
Pfffffff C'est tout ce que tu en as retiré ?
|
Ce que j'en retire, c'est que c'est un projet ambitieux et que j'espère de tout coeur que ça va marcher pour toi.
Mais que dès lors que tu présentes quelque chose et que quelqu'un te donnes conseil, tu montes sur tes grand chevaux. Je pense que dorénavant, tu ferais mieux de terminer tes messages de présentations par "Au fait, j'aimerais qu'on ne me donne pas de conseilles". Je t'assure que tu serais largement moins exaspérant :P
|
https://xvw.lol |
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
xvw -
posté le 18/05/2020 à 04:08:45. (733 messages postés) |
| Ruby est un langage "ouvert", ça veut dire que tu peux modifier n'importe quelle classe en "ajoutant" des méthodes. Par exemple, imaginons qu'on ait cette classe :
1
2
3
4
5
6
7
|
class Foo
def bar
p "Bar"
end
end
|
Tu peux ajouter une méthode à la classe Foo dans un nouveau script :
1
2
3
4
5
6
7
|
class Foo
def foobar
p "FooBar"
end
end
|
Maintenant, la classe Foo a deux methodes (en plus du initialize/new). Ce qui veut dire que tu peux écraser une méthode qui existe déja :
1
2
3
4
5
6
7
|
class Foo
def bar
p "Nouveau bar"
end
end
|
Dorénavant quand tu appelleras :
Ça affichera (dans la console) "Nouveau bar".
Tout ça pourrait passer pour très dangereux (ce qui est d'ailleurs le cas) mais Ruby offre un mécanisme d'extension basé sur les alias.
Par exemple :
1
2
3
4
5
6
7
8
9
10
|
class Foo
alias_method :ancien_bar, :bar
def bar
p "J'appelle bar"
ancien_bar
p "J'ai appelé bar"
end
end
|
Concrètement, la méthode `alias_method` permet de créer une copie d'une méthode en lui donnant un nouveau nom. De ce fait, il devient possible de l'appeler dans l'écrasement de l'ancienne méthode.
C'est primordiale quand on écrit un script parce que si on n'avait pas ce mécanisme d'alias, chaque personne modifiant un script rendrait l'ensemble des autres scripts incompatibles.
Ici, dans le script de Gif, si un Script avait été ajouté avant qui modifiait, par exemple, l'update de Game_picture (ce qui est le cas de RME par exemple), le script de Gif supprimerait toutes les modifications d'avant... ce qui est balot.
Donc concrètement, ça permet d'écrire du code "avant" et "après" une autre méthode. Pas "au milieu", cependant, le RGSS est suffisament bien découpé pour qu'il soit possible d'injecter du code à peu près où l'on veut.
Pour comprendre comment construire des scripts, je t'invite, si ça t'intéresse, à lire ces deux tutoriels (qui sont relativement accessibles) :
https://www.biloucorp.com/creation-dun-shifumi-avec-le-rgss3-16
https://www.biloucorp.com/creer-son-propre-systeme-de-quetes-partie-12-17
|
https://xvw.lol |
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
xvw -
posté le 17/05/2020 à 23:13:36. (733 messages postés) |
| C'est beaucoup mieux !
Par contre plusieurs points :
- je pense que le code ne devrait pas être un mélange entre Anglais et Français. (Et je dropperai les commentaires en Français, quitte à décrire les étapes en complément)
- ton code devrait utiliser des Alias pour ne pas répéter le code déjà existant. Déjà, ça réduira fortement ton code et en plus ça maximisera la comptabilité avec d'autres scripts.
|
https://xvw.lol |
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
xvw -
posté le 17/05/2020 à 15:31:25. (733 messages postés) |
| Le fait de passer par une boucle est assez ennuyant. Est-ce que tu ne penses pas que ce serait mieux de t'inspirer de ce qui est fait pour la rotation (normale) (ou les changements de teintes) histoire de pouvoir l'activer/désactiver à la demande.
|
https://xvw.lol |
Posté dans Forum - [RMXP] Un moyen de libérer la mémoire ? |
xvw -
posté le 15/05/2020 à 12:02:25. (733 messages postés) |
| Excuse moi, j'ai effectivement fait une erreur :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class Spriteset_Map
def purge_character(id)
@character_sprites.delete(id)
end
end
class Game_Map
def purge_event(id)
@events[id].erase
$scene.spriteset.purge_character(id)
end
end
class Interpreter
def purge_event
$game_map.purge_event(@event_id)
end
end
|
(nb: Roi de la suisse se trompe, delete fonctionne par clé)
|
https://xvw.lol |
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
xvw -
posté le 14/05/2020 à 17:03:09. (733 messages postés) |
| Citation: Est-ce que l'expliquer ne suffirait pas |
Je ne trouve pas... parce que la démarche passe à côté de "la manière de programmer pour RPGmaker". Je ne doute pas une seule seconde que l'auteur savait parfaitement "comment s'en servir". Mais ce tutoriel est, pour moi, une petite curiosité partagé entre "potes scripteurs". Ce qui le rend assez inutile car :
- un scripteur sait déjà comment l'implémenter
- un non scripteur ne comprendra pas comment s'en servir.
Expliquer l'approche de manière "moins concrètes" serait sans aucun doute "plus intéressant".
Citation: Est-ce que l'expliquer ne suffirait pas ? A partir du moment où la méthode de base a été expliquée, elle doit pouvoir être adptable un peu partout, non ? |
Dans RPGMaker, un script "ne modifie généralement pas directement le sprite". Il modifie une instance "dynamique" Game_quelquechose qui transmettra ses données à une instance de Sprite_quelquechose. Généralement, on voudrait que ce genre de transformation soit calculée dans la représentation dynamique (Game_xxx) et non visuelle (Sprite_xxx).
D'où le fait que pour moi, il faut soit :
- proposer un script qui implémente correctement ce que propose l'auteur et facile à prendre en main. Ce qui permettrait de réécrire le tutoriel en expliquant comment utiliser le script et eventuellement ajouter un point sur "comment fonctionne le script" (en introduisant la notion de coordonnées).
- soit simplement supprimer/archiver le tutoriel car il n'apporte pas grand chose.
|
https://xvw.lol |
Posté dans Forum - [RMXP] Un moyen de libérer la mémoire ? |
xvw -
posté le 14/05/2020 à 14:20:25. (733 messages postés) |
| Dans son script... même s'il se trouve sur la même map... il devra quand même lire le fichier de la carte... parce que ... Yanfly :P
Le script que j'ai "tenté d'écrire, tu peux remplacer tes deux lignes "effacer cet evenement; $game_map.events.delete_if" par "appel de script > purge_event"
|
https://xvw.lol |
Posté dans Forum - [RMXP] Un moyen de libérer la mémoire ? |
xvw -
posté le 14/05/2020 à 14:05:27. (733 messages postés) |
| Citation:
j'ai inséré dans l'event (en processus parallèle) qui est cloné cette commande via la commande d'évènement "insérer un script", après avoir effacer l'évènement (sans ça sa bug). |
Euh. L'idée c'est de s'en servir quand tu décides de supprimer un événement.
Après, le script est assez ennuyant parce que, a chaque fois que tu insères un événement... il doit lire la carte dans lequel se trouve l'évènement. Je pense qu'il vaudrait mieux utiliser un script mieux fait.
Mais sinon; comme le dit Roi de La Belgique, tu peux essayer d'ajouter ce script :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| class Spriteset_Map
def purge_character(id)
@character_sprites[id].dispose
end
end
class Game_Map
def purge_event(id)
@events[id].erase
$scene.spriteset.purge_character(id)
end
end
class Interpreter
def purge_event
$game_map.purge_event(@event_id)
end
end |
Et dans un évènement invoqué, tu peux utiliser l'appel de Script
(n'ayant pas XP et ne le connaissant pas très bien... il est possible qu'il y ait quelques bugs :P)
|
https://xvw.lol |
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
xvw -
posté le 14/05/2020 à 13:57:38. (733 messages postés) |
| Le tutoriel est discutablement pédagogique. Et même si la version de Gif est "plus user-friendly", elle nécéssite de comprendre la logique des Sprites (et donc par extension des Bitmaps). Et généralement, dès lors que l'on connait ça, l'implémentation du script devient assez évidente.
Pour améliorer le script, il faudrait ajouter sa représentation dynamique (dans Game_Picture, Game_Character etc.).
Ici, posé "plic ploc" comme ça, il n'apporte pas grand chose.
|
https://xvw.lol |
Posté dans Forum - [RMXP] Un moyen de libérer la mémoire ? |
xvw -
posté le 14/05/2020 à 12:20:42. (733 messages postés) |
| Si tu joues cette commande (dans un appel de script), cela devrait purger les événements "supprimés".
1
| $game_map.events.delete_if {|id, event| event.erased? } |
Est-ce que ça améliore ton framerate ?
|
https://xvw.lol |
Posté dans Forum - [VXAce] #LD33 Almost Heroic |
xvw -
posté le 13/05/2020 à 10:12:44. (733 messages postés) |
| Oui, le jeu est assez court car il a été réalisé en une trentaine d'heures. (les mauvaises langues diront que c'est en partie à cause de mon alcoolisme que l'on a eu si peu de temps...)
|
https://xvw.lol |
Posté dans Forum - [VXAce] #LD33 Almost Heroic |
xvw -
posté le 11/05/2020 à 17:30:22. (733 messages postés) |
| Nemau a dit:
J'y ai joué ! (en entier, mais c'était la moindre des choses vu la durée de vie annoncée ^^)
Et j'ai aimé !
A part deux trois minis choses (quelques bugs notamment, tels qu'une phrase en français ou bien encore le fait de pouvoir contourner les squelettes très facilement) c'est juste impec, y a rien à redire. C'est d'autant plus admirable quand on sait que ça a été fait en 72 heures !
GG les bilous.
|
Salut Nemau ! Merci beaucoup pour ton retour :
Nemau a dit:
tels qu'une phrase en français
|
C'est en fait un hommage aux vieux jeux RPG "mal traduits" (FFVII and co). C'est pour cette raison que l'on a délibérément laissé des traductions hasardeuses et du français !
Nemau a dit:
le fait de pouvoir contourner les squelettes très facilement
|
On trouvait ça rigolo (perso, je suis nul au système de combat, donc il me fallait un outil pour éviter un maximum de combats)....
|
https://xvw.lol |
Posté dans Forum - Topic de l'informatique |
xvw -
posté le 08/05/2020 à 16:30:45. (733 messages postés) |
| Le fait de "curryfier" manuellement son code offre l'avantage de permettre l'application partielle des argument. Après, il y a souvent des dérives. Par exemple, ce qu'on appelle 'l'écriture pointfree", en Haskell, https://wiki.haskell.org/Pointfree a engendré pas mal de terreur de Haskell.
Citation: Est-ce bien sérieux de dépenser du temps pour changer de langage, alors que mes programmes fonctionnent, que j'aime assez le JS... et que ces projets s'en fichent d'avoir des portées miuex maîtrisées etc |
Oui je pense que c'est avant tout une question d'envie/volonté. Par contre, les projets s'en fichent d'avoir des portées mieux maitrisées "tant qu'ils fonctionnenent"
|
https://xvw.lol |
Posté dans Forum - Topic de l'informatique |
xvw -
posté le 07/05/2020 à 11:32:17. (733 messages postés) |
| Ce n'est pas "normal" parce que ça pose des problèmes d'ordre de déclaration :
1
2
3
4
5
|
if (someBoolean) {
var x = 10
}
|
Fait varier x comme étant soit undefined soit 10 en fonction de la valeur d'un booléen. Je sais que "avec de la discipline, on n'arrive jamais face à ce genre de cas", mais si tout le monde n'utilise plus du tout var au profit de const (et parfois let), c'est qu'il y a une raison :P
|
https://xvw.lol |
Posté dans Forum - Topic de l'informatique |
xvw -
posté le 07/05/2020 à 10:41:38. (733 messages postés) |
| La portée lexicale te dit que toute variable déclarée est accessible dans le scope courant et dans ses scopes enfants :
1
2
3
4
5
6
7
8
|
var x = ...
for() {
var y = ...
// x devrait être accessible
}
// y ne devrait pas exister
|
|
https://xvw.lol |
Posté dans Forum - Topic de l'informatique |
xvw -
posté le 07/05/2020 à 10:21:07. (733 messages postés) |
| Citation: @xvw : je n'avais pas eu l'occasion de te dire que ton blog était très classe ! J'aime beaucoup de design.
Seul problème c'est que même moi qui m'intéresse énormément à ces sujets (sans avoir la formation), je n'y comprends pas grand chose. J'aurais aimé comprendre par exemple pourquoi tu affectionnes les langages statiquement typés, ce qu'ils apportent... etc J'ai pas les pistes pour revenir aux fondamentaux et par conséquent comprendre pourquoi le JS serait mal pensé. Le côté théorique de la programmation m'intéresse. |
Merci beaucoup ! Même s'il est très clair (visuellement), j'y ai passé pas mal de temps. Si ça t'intéresse, le code du générateur se trouve ici : https://github.com/xvw/planet
L'idée c'est d'avoir plusieurs choses :
- Un outil pour saisir les activités "liées à des projets personnels" ce qui me permet de collecter des métriques (https://xvw.github.io/journal.html)
- Un outil pour gérer des tâches à réaliser (https://xvw.github.io/tasks.html)
- De la rédaction d'article (qui utilise Hakyll, un générateur de blog statique écrit en Haskell) (https://xvw.github.io/longs.html)
- Du suivi de projets (https://xvw.github.io/projects.html)
- Un gestionnaire de galeries (https://xvw.github.io/galleries.html)
- Une page de description (https://xvw.github.io/xavier.html)
- Un suivi de ma position (https://xvw.github.io/location.html)
Plus tard, j'aimerais avoir un suivi des livres que je lis, des films que je regarde etc. Mais c'est un projet qui prend beaucoup de temps. Heureux de lire que tu aimes bien son apparence !
Citation: J'aurais aimé comprendre par exemple pourquoi tu affectionnes les langages statiquement typés, ce qu'ils apportent |
Il y a plusieurs réponses, une courte, une moyenne et une très longue. Peut être qu'un jour, j'aurai le courage de rédiger la très longue sous forme de billet de blog, ici je vais essayer de donner une réponse moyenne.
L'énorme point fort des langages qui offrent une vérification statique des types, c'est qu'ils me permettent d'être moins "intelligent". Cette phase de vérification garantit (dans la mesure du possible) que j'ai pensé à l'intégralité des cas de mon programme. Cet garantie me permet de réfactorer mon code sereinement sans me demander sans arrêt si je n'ai pas oublié certains cas, le compilateur me le dit.
Par exemple, si je décide d'utiliser une liste pour représenter un ensemble de valeur et que, en court de développement, je me dis "tiens, j'essaie de n'avoir que des éléments uniques dans ma liste, donc chaque fois que j'insére un élément, j'applique la méthode [list.uniq], peut être que ce serait plus pertinent d'utiliser un Set, dont c'est le travail". Je dois, "partout où j'ai eu le partit pris que j'utilisais une liste" modifier mon code pour qu'il s'adapte au comportement du Set (donc, par exemple, aller retirer tous les .uniq de mon code).
Il est possible, évidemment, de s'en sortir au moyen de l'encapsulation mais dans un langage qui vérifie les types, je sais, avant d'exécuter (et tester) mon programme s'il est cohérent.
Ensuite, ça me permet de garder en tête des cas un peu chevelus, un cas d'école classique en faveur des langages statiquement typés, la gestion explicite de la nullité. Plutôt que me dire que toutes mes valeurs sont unifiées comme [ ma valeur | null | undefined ], je peux simplement déclarer un type :
1
2
3
4
5
|
type 'a option =
| None
| Some of 'a
|
Qui concrètement me permet juste de gerer explicitement le cas où je n'ai pas de valeur. Le type de la fonction x.[ i ] pourrait être "tu me donnes un tableau de A, x, un entier, i, et je te renvoie un option de A. A l'usage, je serai obligé de déconstruire ma valeur pour l'exploiter ce qui fait que je ne peux plus jamais faire face à des NullPointerException (où "undefined is not a function").
Ce genre de cas (refactoring/nullité) sont des réponses pragmatiques. Et, par exemple; TypeScript s'en tirer "plutôt bien". Quand le système de type est riche comme dans les langages ML (Haskell/OCaml/ReasonML/F#) le système de types est plus riche est plus expressif, ce qui permet de dépasser l'aspect "utilitaire" d'un système de type et approcher une proximité "avec le domaine/métier" (cette présentation sur le sujet est vraiment très très claire https://www.youtube.com/watch?v=PLFl95c-IiU d'ailleurs, toutes les présentations de cette personne sont assez cool). En gros, un système de type expressif offre une manière sûre, mais élégante, de décrire une application. Couplé avec un paradigme de programmation "riche", comme la programmation fonctionnelle, il est possible d'écrire des programmes qui ont une surface "de code pouvant produire des erreurs" beaucoup plus petite.
Concernant les erreurs de conceptions de javascript, il y en a, selon moi, 3 qui sont vraiment signifiantes :
- la portée lexicale de "var" complètement fucked, mais fixé avec let et const en ES6
- le fait d'avoir deux types pour la nullité : undefined | null, même si ils ont une sémantique différente, dans les faits, leur distinction n'a aucun sens
- le fait que le "this" d'une fonction référence la fonction... fixé en ES6 avec les Fat Arrows (=>)
Comme je l'ai dit plus haut, javascript doit vivre avec ses utilisateurs. Le langage a donc beaucoup de mal à évoluer sainement, sans Babel (par exemple), c'est pour ça que je ne me sert de javascript "que comme une cible de compilation". Soit, j'écris mon programme en OCaml et je le compile en javascript. Ce qui me permet de profiter des avantages de OCaml tout en rendant mon programme exécuté dans un browser.
Parce que pour un langage de script, interprété, ça n'a pas de sens d'avoir un système de types vérifié (dans le browser), tu ne veux pas, à chaque page, que ton code doivent être "typechecké" avant d'être affiché pour tous les clients qui naviguent sur ta page.
Tout ça pour dire que tu n'as pas besoin d'avoir un serveur pour tester d'autres technologies. Par exemple en front-end ReasonReact (React avec ReasonML) ou Elm (qui est incroyablement agréable pour s'initier à la programmation fonctionnelle statiquement typé) donne un très bon avant gout !
Citation: Moi j'aime pas ton blog, y a pas de dark mode, c'est un supplice à lire |
La version 2 est en cours de développement (pour des milliers d'années) et elle devrait être sombre :P
|
https://xvw.lol |
Aller à la page: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
|
|