📖

PythonとJavaScriptの yield の違い

2025/01/31に公開

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では、yieldfunction*を使って定義されたジェネレーター関数内で使用される。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