Je suis d'un niveau terminale S en maths, et encore, j'ai oublié beaucoup de choses, et je suis d'accord avec toi sur le fait qu'un informaticien devrait se reconcilier avec les mathématiques pour faire des algorithmes et des programmes toujours plus performants.
Maintenant, il y a aussi quand même des choses qui me trainent dans la tête : prouver constamment les choses admises, n'est-ce pas de la redondance ? J'ai l'impression que quand quelque chose est admis, il suffirait plutôt juste de tester le cas qui ne va pas, et envoyer une erreur. Un peu à la façon d'une base de données, qui recenserait tous les cas possibles, et ceux qui ne le sont pas, sans chercher à savoir ce que la requête veut dire.
Par exemple, voila comment je vois la chose :
On entre x/y dans une ligne de code. Sachant que j'aime beaucoup l'approche Objet ( car je la trouve pratique pour pleins de choses ), dans mon esprit, le fait de faire cette ligne de code dans un bloc ( par exemple une méthode ), implique qu'un attribut de l'objet y soit positionner à true pour ce bloc, par exemple :
1 2 3 4 5
| /* ceci serait effectué lors de la compilation, pour le bloc concerné */
y.setIsZeroAllowed(false);
/* le bloc étant aussi un objet dans ma vision des choses, il faudrait aussi rajouter */
thisbloc.addTestIfZero(y); |
Ensuite, lors de chaque attribution de valeur au runtime pour y, il y aurait le test supplémentaire en début de bloc qui serait bloquant en cas de valeur 0, et donc une erreur serait envoyé, sans que la division ait eut lieu. C'est la façon que je trouve la plus logique d'éviter le cas qui pose problème, ou bien peut-être que je perd de vue des milliers de paramètres, il ne faut pas m'en vouloir, je n'ai jamais conçu de compilateur
Par contre il est vrai que le compilateur a donc beaucoup de travail, et pour simplifier ce travail, il faut avoir une syntaxe très rigoureuse, par exemple au lieu d'écrire :
on pourrait écrire :
Math.divide(x, y);
Je vois bien les problèmes qui se posent par la suite..
Par exemple :
Math.divide(x, (ici une expression complexe) );
Là ça se corse, mais si chaque expression ( même simple, si elle ne contient qu'une variable ) était un objet, j'attribuerais l'attribut isZeroAllowed(false) à l'expression entière, qui elle se chargerait de répercuter au niveau de son propre bloc evaluate()..
Pas taper si je dis des bêtises
Partager