📖
PythonとJavaScriptの yield の違い
yield
Pythonの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
yield
JavaScriptの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
yield from
Pythonの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
yield*
JavaScriptの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