J'ai réfléchi à la façon d'exprimer le rendement de Python en Java et JavaScript.
Cette fois, je n'ai pas essayé de faire quelque chose de pratique, mais j'ai réfléchi à comment le remplacer si je voulais faire un générateur de code.
Pour le moment, j'ai essayé de l'utiliser comme sujet.
http://ideone.com/PG6xOJ
# your code goes here
def Generator(n):
yield 1;
idx = 0
while idx < n:
yield 2
idx += 1
yield 3
g = Generator(5)
for x in g:
print x
Un peu de politique de réflexion
Je l'ai écrit en JavaScript avec cette politique.
http://ideone.com/24L64n
// your code goes here
function Generator(n) {
var ctx = { state:0, idx:0 };
return function() {
while (1) {
switch (ctx.state) {
case 0:
ctx.state = 1;
return 1;
case 1:
if (ctx.idx < n) {
ctx.idx++;
return 2;
}
ctx.state = 2;
break;
case 2:
ctx.state = -1;
return 3;
default:
return undefined;
}
}
};
}
(function() {
var g = Generator(5);
while (1) {
var x = g();
if (x === undefined)
break;
print(x);
}
})();
Je l'ai également écrit en Java.
http://ideone.com/YnxHkv
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
private static class Generator {
final int n_;
int state_ = 0, idx_ = 0;
boolean completed_ = false;
Generator(int n) {
n_ = n;
}
int generate() {
while (true) switch (state_) {
case 0:
state_ = 1; return 1;
case 1:
if (idx_ < n_) {
idx_++;
return 2;
}
else {
state_ = 2;
}
break;
case 2:
completed_ = true;
return 3;
}
}
boolean isCompleted() { return completed_; }
}
public static void main (String[] args) throws java.lang.Exception
{
Generator g = new Generator(5);
while (! g.isCompleted()) {
int x = g.generate();
System.out.println(x + "");
}
}
}
Les deux bougent pour le moment.
Existe-t-il déjà un tel générateur de code?
À une époque où les instructions yield peuvent être utilisées normalement dans les navigateurs, vous n'avez pas à y penser.
Recommended Posts