Aller à la page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
Reprise du message précédent:
AzRa -
posté le 06/05/2020 à 13:08:50 (11282 messages postés)
| 418. I'm a teapot. | Citation: Tu utilises quoi de l'ES6 ?
Node permet déjà require(), module.exports = {}... etc |
J'ai appris avec l'ES6, donc en fait j'en utilise les fonctionnalités sans savoir si elles sont nouvelles ou anciennes.
Les seules dont je sais qu'elles sont bien de l'ES6 c'est celles que tu cites : require et export. Après j'ai cru comprendre que const n'existait pas non plus en ES5 mais ça me semble un peu gros ? (Encore qu'en fait il suffit de mettre une majuscule à sa variable pour en faire une constante, en pratique, or ça je suppose que ça a toujours existé ?)
En tout cas, oui, Node en tant que tel permet d'utiliser l'ES6, mais pas avec Express en tant que serveur, ou alors vraiment une version récente dont je n'aurais pas encore entendu parler.
Sinon oui, ça marche pour des programmes locaux que tu fais tourner dans ton terminal/invite de commandes. Ça oui.
Citation: J'ai fouillé dans mon dernier chatBot, mes seules dépendances sont express, soclet.io et lodash (pour manipuler des objets je crois). |
Pour ce projet j'en ai 3 :
"dotenv": "^8.2.0",
"express": "^4.17.1",
"socket.io": "^2.3.0"
|
Agus fagaimid suid mar ata se. | Suite du sujet:
Lünn -
posté le 06/05/2020 à 13:22:45 (4233 messages postés)
| | Et tu accèdes à ton serveur / vps en ssh ?
On peut utiliser require() et module.export sur Node, sans Babel.
Pour const, je pense surtout que c'est récent sur les objets (pas pour les variables).
Citation: En tout cas, oui, Node en tant que tel permet d'utiliser l'ES6, mais pas avec Express en tant que serveur, ou alors vraiment une version récente dont je n'aurais pas encore entendu parler. |
Là je comprends pas trop.
J'utilise express surtout quand j'ai besoin de plusieurs URL :
1
2
3
4
5
|
app.get('/', function(req, res) {
res.send('hello world');
});
|
bot.js (node, express, socket.io)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
var http = require("http");
var express = require("express");
var app = express();
/* la configuration d'express, les routes, etc : */
app.use(express.static("./public"));
app.get('/responses', function (req, res) {
res.setHeader('Content-Type', 'text/plain');
res.send(responses);
});
app.get('/ram', function (req, res) {
res.send(ram);
});
app.get('/memory', function (req, res) {
res.send(memory.responses);
});
/* serveur */
var server = http.createServer(app).listen(3333);
//socket.io
require('./sockets').listen(server);
var core = require('./core/core');
|
Socket.js :
1
2
3
4
5
6
|
var socketio = require('socket.io');
var core = require('./core/core');
module.exports.listen = function(server) { ... }
|
|
trotter -
posté le 06/05/2020 à 13:26:18 (10750 messages postés)
- | | Par curiosité c'est quoi ce chat bot ?
|
ౡ |
AzRa -
posté le 06/05/2020 à 13:30:07 (11282 messages postés)
| 418. I'm a teapot. | Bordel j'ai confondu. Excuse. Oui, forcément, require marche. C'est pas de l'ES6, require. C'est de import que je voulais parler.
Essaye de remplacer
1
| var express = require("express"); |
Par
1
| import * as express from 'express'; |
Ou
1
| import express from 'express'; |
Dans ton code pour voir. Ça ne devrait plus fonctionner.
Citation: Et tu accèdes à ton serveur / vps en ssh ? |
J'ai encore un peu de mal avec certains termes techniques. Tu peux clarifier ce que tu veux dire par y accéder en ssh ?
|
Agus fagaimid suid mar ata se. |
Lünn -
posté le 06/05/2020 à 14:03:14 (4233 messages postés)
| | Citation: C'est pas de l'ES6, require. C'est de import que je voulais parler. |
Ah oui en effet... tu viens de me rappeler que j'avais eu le même problème que toi. Dans node faut exporter les fonctions que tu stockes dans des fichiers .js, et require() les fichiers dans ton programme principal. C'est un peu différent. Ça ne doit pas être très compliqué à convertir.
Sinon regarde les évolutions de Node.js.
Par exemple mon fameux core.js du bot :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
var fs = require('fs');
/* fonction à utiliser dans ce fichier */
fonctionInterne1(array) {
return ;
}
/* fonctions à exporter pour le programme principal */
module.exports = {
fonction1: function () {
},
fonction2: function (input) {
}
};
|
Citation: J'ai encore un peu de mal avec certains termes techniques. Tu peux clarifier ce que tu veux dire par y accéder en ssh ? |
C'était pour savoir si tu pouvais te connecter à ton serveur en ligne de commande (ssh login@IP) et installer n'importe quoi sur ce serveur.
Citation: Par curiosité c'est quoi ce chat bot ? |
On en avait parlé il y a quelques années J'avais beaucoup étudié ton Genesis que j'ai encore sur mon ordi.
Mon bot fonctionne mais il est assez étrange. Disons qu'il tente de détecter plusieurs échelles de patterns dans une phrase. Il détecte premièrement les petits patterns, puis choisit un superpattern qui correspond le mieux à la somme des petits patterns. Une troisième couche d'analyse permet de réinterroger les superpatterns en cas de questions comme Pourquoi ? Comment ?
En gros : {{you}} {{happy}} > {{iAmHappy}} > {{why}} > {{whyIAmHappy}}
Mais clairement ça manque de réponses pour qu'il soit intéressant... je dois en avoir un 100aine, et je sais qu'il en faudrait au moins 1000 si c'est pas plus.
|
AzRa -
posté le 06/05/2020 à 14:57:50 (11282 messages postés)
| 418. I'm a teapot. | Citation: Dans node faut exporter les fonctions que tu stockes dans des fichiers .js, et require() les fichiers dans ton programme principal. C'est un peu différent. Ça ne doit pas être très compliqué à convertir. |
Ça ça va encore, oui. Après y a quand même plusieurs autre différences que j'aurais été obligé d'apprendre si Xiaoxiao n'était pas venu à la rescousse avec sa solution en Typescript. J'étais presque prêt à le faire mais tant qu'à apprendre de nouvelles choses j'aime autant que ça soit ça : des nouvelles choses. Pas des vieilles.
Mais ce "dans node" me gène un peu quand même. Je ne sais jamais trop comment le formuler parce que tout le monde a l'air de faire comme toi, mais c'est seulement dans le cadre d'un backend en node pour un site web, cette restriction. C'est dû à ce que xvw expliquait plus haut au sujet de la compatibilité avec les navigateurs.
Mais enfin si j'écris ce programme :
1
2
3
4
5
6
7
8
9
| const fs = require('fs');// pour pouvoir lire et créer des fichiers sur le DD
const data = 'hello world';
fs.writeFile("hello.txt", data, function(err) {
if (err) {
console.log(err);
}
});
|
Et que je le sauve sous le nom de hello.js sur mon DD pour ensuite le lancer depuis mon terminal en tapant "node hello.js" c'est pas du node, ça ?
EDIT : Bon en fait t'as raison, ça foire avec import. Pourtant y a des const là-dedans, or c'est de l'ES6, ça, non ?
Lünn a dit:
C'était pour savoir si tu pouvais te connecter à ton serveur en ligne de commande (ssh login@IP) et installer n'importe quoi sur ce serveur.
|
Ah ok. Bah t'as ta réponse, je pense . Je sais même pas trop si c'est possible avec Heroku. Ça l'est probablement mais pas forcément avec le programme gratuit. Et si ça l'est, well, il me reste toujours à apprendre comment le jour où j'en aurai besoin.
|
Agus fagaimid suid mar ata se. |
Lünn -
posté le 06/05/2020 à 15:08:34 (4233 messages postés)
| | Citation:
Regarde quand même le lien que j'ai posté sur les évolutions de Node et vérifie la version de Node utilisée sur Heroku. Du fait que tu sois sur le cloud, tu ne peux peut-être pas choisir une version particulière de Node (ce qui est possible sur un VPS).
Node latest-v13.x semble supporter ECMAScript par défaut, bien que ce soit expérimental.
Après si c'est que require à la place d'import... moi ça me gène pas tellement, c'est une manière d'organiser des fichiers, pas une syntaxe. Et la fonctionnalité existe.
Il y a des choses que je n'utilise en revanche pas encore comme "Class" en JS.
Globalement je suis d'avis d'utiliser un JS qui est OK pour les dernières versions des navigateurs (rien à battre d'IE), mais d'éviter encore les dernières nouveautés.
ps: je ne vois pas de problème dans ton programme non ?
Pour const moi j'en utilise (rarement), pour stocker des données invariables (c'est rare qu'une donnée soit invariable dans mes programmes en tous cas).
C'est d'utiliser const = {} (objet) qui doit être plus problématique.
|
AzRa -
posté le 06/05/2020 à 15:27:58 (11282 messages postés)
| 418. I'm a teapot. | Ok ok je regarde à ça.
Citation: Heroku supports the latest Stable version of Node.js as well as all active LTS (Long-Term-Support) versions. Heroku will support new releases within 24 hours of the official release from the Node team.
Currently, supported versions are 10.x, 12.x, 13.x, and 14.x. |
Que je vois sur le site d'Heroku.
Citation: ps: je vois de problème dans ton programme non ? |
Y en a pas. C'est juste que je viens de me rendre compte qu'en remplaçant require par import ça foirait aussi. Mais ça doit être dû à ma version de node. J'utilisais une version plus récente jusque récemment mais j'ai rétrogradé pour installer un dépendance pour un autre projet. J'ai la version 10.19.0 là. Du coup si ça se trouve avant je pouvais utiliser tout ça et c'est maintenant que j'ai rétrogradé que ça foire .
|
Agus fagaimid suid mar ata se. |
Lünn -
posté le 06/05/2020 à 15:35:14 (4233 messages postés)
| | J'utilise Node 10.x pour que Ghost tourne bien.
Dernièrement ils conseillent de passer à Node 12.x.
Au premier coup d’œil c'est vraiment Node 13.x qui n'est pas une version stable qui supporterait ECMAScript (mais j'ai pas bien regardé la doc).
Si tu remplaces par require() faut pas oublier d'exporter dans les autres fichiers. C'est l'inconvénient, tu ne peux pas require() un fichier sans exporter ce que tu veux require dans ce fichier.
Sinon tu utilises quoi d'autre de problématique ?
Ce n'est qu'une question de temps avant que Node intègre tout ça, mais je pense pas qu'ils soient si en retard. T'es trop dans le turfu !
|
AzRa -
posté le 06/05/2020 à 15:45:16 (11282 messages postés)
| 418. I'm a teapot. | Citation: Sinon tu utilises quoi d'autre de problématique ? |
C'était surtout avec Sequelize que c'était insolvable, cette histoire d'ES6 (encore pour un autre projet de bot de lending crypto). Mais je ne sais pas au juste à quel niveau précisément. J'ai pas été fouiller le détail de ce qui coinçait à l'époque.
|
Agus fagaimid suid mar ata se. |
trotter -
posté le 06/05/2020 à 15:47:47 (10750 messages postés)
- | | Super ton site Lünn. Dommage qu'on puisse pas tester le bot encore.
Pour info (j'y pense en voyant ton article/débat sur l'I.A., il y a eu un débat sur le moi, la conscience etc dans le topic du veganisme.
|
ౡ |
Xiaoxiao -
posté le 06/05/2020 à 15:52:33 (529 messages postés)
| | xvw a dit:
Citation: Vue est mieux que React et Angular, tu penses, donc ? |
Les mauvaises langues diront que les trois sont mauvais...
|
Ahah, merci pour le fou rire !
Car c'est exactement ce que certains collègues et moi-même vivons. On a essayé de proposer un stack avec React ou Vue / Laravel, mais encore une fois, c'est la techno JS qui n'a pas été appréciée à sa juste valeur.
En fait, ce sont des librairies qui effraient beaucoup techniquement aux non initiés de ce que j'ai pu constater.
Alors qu'à ce jour, chacun fait un peu comme bon lui semble avec le framework maison qu'on nous impose. Je ne vous explique pas les .js produits. C'est un langage tellement permissif...
Heureusement qu'il existe des alternatives comme TypeScript qui permettent d'utiliser les nouvelles normes sans avoir à se soucier de la rétro-compatibilité.
|
►RPG Maker Détente, la communauté des détendus◄►Construct French, la communauté francophone des CONSTRUCTeurs◄ |
Xiaoxiao -
posté le 06/05/2020 à 15:59:26 (529 messages postés)
| | François Berhn a dit:
Typescript ça pue un peu aussi
|
Si tu le dis.
Quoi qu'il en soit, pour moi et les ESN que j'ai fréquentées, le choix est vite fait entre JS et TypeScript.
|
►RPG Maker Détente, la communauté des détendus◄►Construct French, la communauté francophone des CONSTRUCTeurs◄ |
Lünn -
posté le 06/05/2020 à 16:07:01 (4233 messages postés)
| | @trotter :
J'avais adoré ces discussions avec toi mais aussi les papys. On avait eu cette convers sur l'IA. Je leur avais demandé de publier nos conversations reformulées. "R", c'est Rots... "S" : Sylavnor, "N" : Nuki... Et "L" moi (mais je dis rien d'intéressant).
Le système du bot en soi est marrant et assez simple, mais c'est loin des ambitions que j'avais à l'époque. A chaque fois qu'on s'intéresse au TALN c'est dur de ne pas se diriger vers l'analyse grammaticale ou de ne pas utiliser des BDD énormes. Le but était de pas faire de questions/réponses, mais de ne pas non plus utiliser de BDD énormes. C'est à moitié réussi on va dire
|
François Berhn -
posté le 06/05/2020 à 16:11:44 (5402 messages postés)
| Tonton Hellper | Xiaoxiao a dit:
Si tu le dis.
|
Oui je le dis parce que je l'utilise au boulot et c'est vraiment triste
J'ai pas noté tous les trucs que je trouve aberrants mais par exemple le fait d'avoir un type any c'est une jolie farce
Xiaoxiao a dit:
Quoi qu'il en soit, pour moi et les ESN que j'ai fréquentées, le choix est vite fait entre JS et TypeScript.
|
Perso, entre JS et TypeScript, je choisis Reason
|
La liste des raisons pour lesquelles le making se meurt, la cinquième va vous étoner | Des projets abandonnés, source d'inspiration :D | Mes jeux |
Xiaoxiao -
posté le 06/05/2020 à 16:25:30 (529 messages postés)
| | François Berhn a dit:
Oui je le dis parce que je l'utilise au boulot et c'est vraiment triste
J'ai pas noté tous les trucs que je trouve aberrants mais par exemple le fait d'avoir un type any c'est une jolie farce
|
Je suis plutôt d'accord, mais il peut s'avérer utile.
François Berhn a dit:
Perso, entre JS et TypeScript, je choisis Reason
|
Merci pour cette découverte !
Mais passer du JS au TypeScript, ça a été une révélation et une bénédiction personnellement. J'ai vraiment du mal à aller voir ailleurs aujourd'hui. Cependant pour des raisons de chiffrage, j'utilise encore du JS aujourd'hui dans certains projets pro qui nécessiteraient beaucoup trop de jours / hommes pour faire la transition.
|
►RPG Maker Détente, la communauté des détendus◄►Construct French, la communauté francophone des CONSTRUCTeurs◄ |
trotter -
posté le 06/05/2020 à 16:39:23 (10750 messages postés)
- | | Lünn a dit:
@trotter :
J'avais adoré ces discussions avec toi mais aussi les papys. On avait eu cette convers sur l'IA. Je leur avais demandé de publier nos conversations reformulées. "R", c'est Rots... "S" : Sylavnor, "N" : Nuki... Et "L" moi (mais je dis rien d'intéressant).
Le système du bot en soi est marrant et assez simple, mais c'est loin des ambitions que j'avais à l'époque. A chaque fois qu'on s'intéresse au TALN c'est dur de ne pas se diriger vers l'analyse grammaticale ou de ne pas utiliser des BDD énormes. Le but était de pas faire de questions/réponses, mais de ne pas non plus utiliser de BDD énormes. C'est à moitié réussi on va dire
|
Ca me dégoûte un peu de voir les chatbots utilisés pour :
-récupérer des informations personnelles ("je suis Robbi ton ami virtuel hihi dis moi tout je ne revendrai presque rien !")
-remplacer des humains ("Je suis Robbi votre téléconseiller. Je n'ai pas bien compris votre question.")
-se faire passer pour des humains ("Allo mamie c'est moi Robert, envoie moi de l'argent stp") - voir la conférence de google très flippante où un chatbot téléphone et réserve une table au restaurant.
|
ౡ |
xvw -
posté le 06/05/2020 à 16:54:00 (736 messages postés)
- | yo | Citation: Ahah, merci pour le fou rire !
Car c'est exactement ce que certains collègues et moi-même vivons. On a essayé de proposer un stack avec React ou Vue / Laravel, mais encore une fois, c'est la techno JS qui n'a pas été appréciée à sa juste valeur.
En fait, ce sont des librairies qui effraient beaucoup techniquement aux non initiés de ce que j'ai pu constater. |
Les mauvaises langues (2) diront qu'elles effraient aussi les initiés. (J'ai donné des formations React/Redux chez "des grands groupes" parce que ça faisait partie de mon contrat).
J'ai toujours été incroyablement surpris du bruit conceptuel que Redux ajoute autours d'une bête machine de Moore. Mais je pense que le gros problème de javascript/TypeScript et spécifiquement des frameworks comme React, Vue et Angular, c'est qu'ils transmettent plusieurs idiomes qui deviennent des normes alors que c'était juste mal pensé à la base.
Toute personne aimant les langages statiquement typés ne peut qu'être que frustré par TypeScript.
|
https://xvw.lol |
Xiaoxiao -
posté le 06/05/2020 à 18:26:48 (529 messages postés)
| | xvw a dit:
Citation: Ahah, merci pour le fou rire !
Car c'est exactement ce que certains collègues et moi-même vivons. On a essayé de proposer un stack avec React ou Vue / Laravel, mais encore une fois, c'est la techno JS qui n'a pas été appréciée à sa juste valeur.
En fait, ce sont des librairies qui effraient beaucoup techniquement aux non initiés de ce que j'ai pu constater. |
Les mauvaises langues (2) diront qu'elles effraient aussi les initiés. (J'ai donné des formations React/Redux chez "des grands groupes" parce que ça faisait partie de mon contrat).
J'ai toujours été incroyablement surpris du bruit conceptuel que Redux ajoute autours d'une bête machine de Moore. Mais je pense que le gros problème de javascript/TypeScript et spécifiquement des frameworks comme React, Vue et Angular, c'est qu'ils transmettent plusieurs idiomes qui deviennent des normes alors que c'était juste mal pensé à la base.
Toute personne aimant les langages statiquement typés ne peut qu'être que frustré par TypeScript.
|
Ce n'est pas être mauvaise langue, c'est juste un constat que j'ai pu faire d'après mon expérience personnelle avec les équipes avec qui j'ai collaboré.
Très récemment, après une simple présentation de React, les réactions à chaud étaient pleines d'appréhension sur la partie technique et l'apprentissage.
Mais heureusement que ça ne semble pas être une généralité.
Je suis d'accord avec le reste de ton message.
Edit: Ah au temps pour moi, sur smartphone j'ai lu "aussi les non initiés" et non "aussi les initiés".
Du coup, j'ai du mal à comprendre comment certaines personnes pourraient dire ça. Enfin, quoique, je connais quelqu'un de mon équipe qui pourrait le dire.
Edit 2: D'ailleurs cette conversation me rappelle que j'ai découvert React et avant tout Redux avec React Native (me demande pas comment j'ai pu découvrir React Native avant React par contre ).
|
►RPG Maker Détente, la communauté des détendus◄►Construct French, la communauté francophone des CONSTRUCTeurs◄ |
Lünn -
posté le 06/05/2020 à 21:08:43 (4233 messages postés)
| | trotter a dit:
Ca me dégoûte un peu de voir les chatbots utilisés pour :
-récupérer des informations personnelles ("je suis Robbi ton ami virtuel hihi dis moi tout je ne revendrai presque rien !")
-remplacer des humains ("Je suis Robbi votre téléconseiller. Je n'ai pas bien compris votre question.")
-se faire passer pour des humains ("Allo mamie c'est moi Robert, envoie moi de l'argent stp") - voir la conférence de google très flippante où un chatbot téléphone et réserve une table au restaurant.
|
Haha oui... j'ai un bouquin sur les chatbots qui résume un peu ça.
J'avoue m'être intéressé aux tests de personnalité pour capter des données, et au passage influencer les élections du délégué du personnel de mon agence... mais bon rassure toi mon âme d'artiste prend toujours le dessus.
@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.
Je me suis intéressé à plein de langages, mais j'ai continué seulement avec ceux qui me servent : me permettent de faire du web. Aujourd'hui j'ai des VPS, donc je pourrais envisager d'utiliser d'autres technos...
|
| Chanter l'hyperchleuasme | Moi j'aime pas ton blog, y a pas de dark mode, c'est un supplice à lire
|
Es-tu une star ? | Kujira no Hara | Muma|Rope | Polaris 03 | La 7e porte |
xvw -
posté le 07/05/2020 à 10:21:07 (736 messages postés)
- | yo | 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 |
| Chanter l'hyperchleuasme | Nice
xvw a dit: - la portée lexicale de "var" complètement fucked |
C'est quoi le problème de var ? La portée de la variable, c'est la fonction où elle a été déclarée
|
Es-tu une star ? | Kujira no Hara | Muma|Rope | Polaris 03 | La 7e porte |
xvw -
posté le 07/05/2020 à 10:41:38 (736 messages postés)
- | yo | 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 |
| Chanter l'hyperchleuasme | On peut accéder à x après le for ? C'est louche cette affaire.
|
Es-tu une star ? | Kujira no Hara | Muma|Rope | Polaris 03 | La 7e porte | Aller à la page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118Index du forum > La Taverne > Topic de l'informatique
|