yield در جاوا اسکریپت


کلمه کلیدی yield به شما این امکان را می دهد که یک generator function را متوقف کرده و دوباره از سر بگیرید(*
function
).
در زیر syntax کلمه کلیدی yield نشان داده شده است:
1 |
[variable_name] = yield [expression]; |
در این syntax :
- expression مقدار(value) برگشتی از generator function بر اساس teration protocol را مشخص می کند.اگر expression را حذف کنید،yield در عمل undefined را برمی گرداند.
- variable_name مقدار اختیاری پاس داده شده به ()next را ذخیره می کند.
برای درک بهتر yield
در ادامه از چند مثال استفاده می کنیم.
Returning a value(A
مثال زیر نحوه استفاده از کلمه کلیدی yield برای بازگشت value از یک generator function را نشان می دهد:
1 2 3 4 5 6 7 8 9 |
function* foo() { yield 1; yield 2; yield 3; } let f = foo(); console.log(f.next()); |
خروجی :
1 |
{ value: 1, done: false } |
همانطور که ملاحظه می کنید،زمانی که ()next را فراخوانی می کنید،value بعد از yield
به value
property اضافه می شود.
1 |
yield 1; |
Returning undefined(B
در مثال زیر نحوه استفاده از کلمه کلیدی yield برای بازگرداندن undefined را نشان می دهد:
1 2 3 4 5 6 |
function* bar() { yield; } let b = bar(); console.log(b.next()); |
خروجی:
1 |
{ value: undefined, done: false } |
Passing a value to the next()
method(C
در مثال زیر، کلمه کلیدی yield یک expression است که argument پاس داده شده به متد ()next را evaluates می کند:
1 2 3 4 5 6 7 8 9 |
function* generate() { let result = yield; console.log(`result is ${result}`); } let g = generate(); console.log(g.next()); console.log(g.next(1000)); |
اولین فراخوانی ()g.next باعث می شود تا object زیر برگشت داده شود:
1 |
{ value: undefined, done: false } |
در فراخوانی دوم، ()g.next کارهای زیر را انجام می دهد:
- مقدار yield که برابر با 1000 است به
result
اختصاص داده می شود. - پیام را در خروجی نمایش داده و object را برگشت داده می شود.
خروجی :
1 2 |
result is 1000 { value: undefined, done: true } |
Using yield
in an array(D
مثال زیر از کلمه کلیدی yield به عنوان عناصر آرایه استفاده می کند:
1 2 3 4 5 6 7 8 9 10 |
function* baz() { let arr = [yield, yield]; console.log(arr); } var z = baz(); console.log(z.next()); console.log(z.next(1)); console.log(z.next(2)); |
اولین فراخوانی ()z.next باعث می شود تا اولین عنصر آرایه arr
برابر با 1 و object زیر برگشت داده شود:
1 |
{ value: undefined, done: false } |
دومین فراخوانی ()z.next باعث می شود تا دومین عنصر آرایه arr
برابر با 2 و object زیر برگشت داده شود:
1 |
{ value: undefined, done: false } |
سومین فراخوانی ()z.next باعث می شود تا عناصر آرایه arr
نمایش داده شود و object زیر برگشت داده شود:
1 2 |
[ 1, 2 ] { value: undefined, done: true } |
Using yield
to return an array(E
generator function زیر از کلمه کلیدی yield برای برگرداندن یک آرایه استفاده می کند:
1 2 3 4 5 6 7 8 9 10 |
function* yieldArray() { yield 1; yield [ 20, 30, 40 ]; } let y = yieldArray(); console.log(y.next()); console.log(y.next()); console.log(y.next()); |
اولین فراخوانی ()y.next باعث می شود تا object زیر برگشت داده شود:
1 |
{ value: 1, done: false } |
دومین فراخوانی ()y.next باعث می شود تا object زیر برگشت داده شود:
1 |
{ value: [ 20, 30, 40 ], done: false } |
سومین فراخوانی ()y.next باعث می شود تا object زیر برگشت داده شود:
1 |
{ value: undefined, done: true } |
Using the yield
to return individual elements of an array(F
به generator function زیر توجه کنید:
1 2 3 4 5 6 7 8 9 10 11 |
function* yieldArrayElements() { yield 1; yield* [ 20, 30, 40 ]; } let a = yieldArrayElements(); console.log(a.next()); // { value: 1, done: false } console.log(a.next()); // { value: 20, done: false } console.log(a.next()); // { value: 30, done: false } console.log(a.next()); // { value: 40, done: false } |
دیدگاهتان را بنویسید