📖
PythonとJavaScriptの yield の違い
Pythonのyield
Pythonでは、yieldは主にジェネレーター関数で使用される。ジェネレーター関数はイテレータを返す特殊な関数であり、yieldを使って一度に一つずつ値を生成する。
def generator_example():
yield 1
yield 2
yield 3
gen = generator_example()
print(next(gen)) # 出力: 1
print(next(gen)) # 出力: 2
print(next(gen)) # 出力: 3
JavaScriptのyield
JavaScriptでは、yieldはfunction*を使って定義されたジェネレーター関数内で使用される。yieldはジェネレーターの実行を一時停止し、呼び出し元に値を返す。
function* generatorExample() {
yield 1;
yield 2;
yield 3;
}
const gen = generatorExample();
console.log(gen.next().value); // 出力: 1
console.log(gen.next().value); // 出力: 2
console.log(gen.next().value); // 出力: 3
Pythonのyield from
Pythonのyield fromは、他のジェネレーターやイテラブルオブジェクトから値を取得するために使用される。
def sub_generator():
yield 1
yield 2
yield 3
def main_generator():
yield from sub_generator()
yield 4
gen = main_generator()
print(next(gen)) # 出力: 1
print(next(gen)) # 出力: 2
print(next(gen)) # 出力: 3
print(next(gen)) # 出力: 4
JavaScriptのyield*
JavaScriptにはPythonのyield fromと同様の機能はないが、yield*という類似のキーワードがある。これを使用することで、他のジェネレーター関数から値を取得できる。
function* subGenerator() {
yield 1;
yield 2;
yield 3;
}
function* mainGenerator() {
yield* subGenerator();
yield 4;
}
const gen = mainGenerator();
console.log(gen.next().value); // 出力: 1
console.log(gen.next().value); // 出力: 2
console.log(gen.next().value); // 出力: 3
console.log(gen.next().value); // 出力: 4
Discussion