narjes Mansoori
narjes Mansoori
خواندن ۲ دقیقه·۱۰ ماه پیش

ترمینال اپراتور ها (Terminal Operators)در flow ها

ترمینال اپراتورها در فلوها عملیاتی هستند که به واقع فلو را خاتمه می‌دهند . این اپراتورها اجازه می‌دهند تا مقادیر را از فلوها جمع آوری کنید و انجام عملیات‌های مختلفی روی آن‌ها داشته باشید.

مهمترین ترمینال اپراتور collect است که به عنوان گردآورنده عمل می‌کند. این اپراتور اجازه می‌دهد تا مقادیری که در فلوها تولید شده‌اند را جمع آوری کنید و آن‌ها را به صورت مشخص چاپ یا استفاده دیگری از آن‌ها داشته باشید.

همچنین ترمینال اپراتورها می‌توانند عملیاتی مانند کاهش (reduce) را اعمال کنند که به ازای هر آیتم ارسالی یک تابع مشخص را اعمال می‌کنند و نهایتاً یک مقدار نهایی را ارسال می‌کنند.

به عنوان مثال، در کد زیر، ما از ترمینال اپراتور collect برای جمع‌آوری مقادیر از یک فلو استفاده می‌کنیم:

(1..5).asFlow()
.filter {
it % 2 == 0
}
.map {
it * it
}
.collect {
Log.d(TAG, it.toString())
}

در این مثال، با استفاده از ترمینال اپراتور collect، ما مقادیری که از فلو تولید شده‌اند را جمع‌آوری کرده و آن‌ها را به صورت مشخص چاپ می‌کنیم.

بنابراین، ترمینال اپراتورها اساسی‌ترین بخش از یک فلو هستند که با استفاده از آن‌ها می‌توانید مقادیر را جمع آوری کرده و با آن‌ها کار کنید.

پس، اگر شما فقط خط زیر را بنویسید، فلو آغاز نمی‌شود:

(1..5).asFlow()
.filter {
it % 2 == 0
}
.map {
it * it
}

شما باید از عملگر ترمینال برای شروع آن استفاده کنید، در این مورد، collect.

حالا بیایید عملگر ترمینال دیگری را که عملگر کاهش (reduce) است ببینیم.

در عملگر کاهش، یک تابع به هر آیتم ارسال شده اعمال می‌شود و مقدار نهایی را ارسال می‌کند. به عنوان مثال:

val result = (1..5).asFlow() .reduce { a, b -> a + b } Log.d(TAG, result.toString())

در اینجا، نتیجه 15 خواهد بود.

خب در مورد این عملگر توضیحاتی بدم :

در مرحله اولیه، داریم 1، 2، 3، 4، 5 که قرار است ارسال شوند.

اولاً، a = 0 و b = 1 است که بر اساس مراحل، تغییر می‌کنند.

مرحله 1:

a = 0، b = 1

a = a + b = 0 + 1 = 1

مرحله 2:

a = 1، b = 2

a = a + b = 1 + 2 = 3

و غیره...

در نهایت، مقدار نهایی به عنوان 15 خواهد بود.

coroutine
Android Developer
شاید از این پست‌ها خوشتان بیاید