eval.js
Sur ces bases, écrivons une nouvelle macro eval.js
:
(function(){
exports.name = "eval";
exports.params = [{name: "fun"}];
exports.run = function(fun) {
return eval(fun);
};
})();
Nous pouvons l’utiliser ainsi :
<<eval "2+2">>
<<eval "new Date()">>
<<eval "alert('ok');">>
<<eval "var sum = new Function('a', 'b', 'return a + b');sum(10, 32)">>
<<eval "Math.E">>
<<eval "Math.pow(2,3)">>
// Jeter un dé :
<<eval "Math.floor(Math.random() * 7);">>
<<eval "
const n = 6710859;
function isPrime(n) { return !(Array(n+1).join(1).match(/^1?$|^(11+?)\1+$/)); }
isPrime(13);
">>
◉ Sources :
Ce code javascript est incroyable :
<<eval "
const reject = (pred, array) => array.filter((...args) => !pred(...args));
reject(word => word.length > 4, ['Mandarine', 'Pomme', 'Cerise', 'Poire', 'Kiwi', 'Banane']); // Kiwi
">>
Voir celui-ci :
<<eval "
const sample = arr => arr[Math.floor(Math.random() * arr.length)];
sample([1,2,3,4,5,6,7,8,9,10]);
">>
et
<<eval "
const similarity = (arr, values) => arr.filter(v => values.includes(v));
similarity(['pierre','feuille', 'ciseau'], ['feuille','chifoumi', 'pierre']);
">>
Un petit dernier :
<<eval "
const take = (arr, m=1, n=m+1) => arr.slice(m-1, n);
take(['A', 'B', 'C', 'D', 'E', 'F', 'G'], 3, 6); //CDEF
">>
◉ Sources incroyables à voir impérativement : https://30secondsofcode.org/
Pour créer automatiquement 1 nouveau tiddly toutes les minutes :
<<eval "
var x = setInterval(function() {$tw.wiki.addTiddler(new $tw.Tiddler({
title: 'Tiddly'+Math.floor(Math.random() * 70000),
gen: 'demo'
}));}, 600000);
">>
Je vous conseille de faire cet exercice dans un tiddlywiki de brouillon…
◉ Sources : https://github.com/Jermolene/TiddlyWiki5/issues/2025
◉ Sources : https://www.w3schools.com/jsref/met_win_settimeout.asp
◉ Sources : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/eval
Afficher de 1 à N
\define compte(borne)
<<eval "
const times = (n, fn, context = undefined) => {
let i = 1;
while (fn.call(context, i) !== false && ++i < n+1) {}
};
var output = '';
times($borne$, i => (output += i + ' '));
output;
">>
\end
<<compte 5>>
Ici on combine à la fois les macros de tiddlywiki (avec le pragma \define
) et le code javascript. Cela ouvre évidemment énormément de possibilités.
A propos de la syntaxe ‹ fonction = (params) => code;
›
On note que l’affectation par décomposition est doublée d’une fonction fléchée à voir dans les sources ci-dessous (c’est vraiment technique)
◉ Sources : https://github.com/30-seconds/30-seconds-of-code
◉ Affectation par décomposition : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Opérateurs/Affecter_par_décomposition
◉ Fonction fléchée : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Fonctions/Fonctions_fléchées