استفاده از حلقه یا تابع بازگشتی ؟

با درود خدمت شما دوستان عزیز.
امید وارم تیتر مناسب زده باشم و چون الان کدی هم تو ذهنم نیست کلا اشتباه بیان کرده باشم این سوال رو.

ببنید دوستان من جدیدا کد های زیادی برام پیش اومده مثل کد زیر

حالا برام سواله که شما اگر بودید بین دو امکان زیر کدام را انتخاب می کردید و چرا ؟

استفاده از یک حلقه برای چاپ ؟
یا استفاده از تابعی که خودشو صدا می زنه و همون کار حلقه رو انجام می ده؟

برام سوال شده کدوم از نظر سرعت و بهبود برنامه مفید تره ؟

1 پسندیده

مفهوم حلقه در functional programming با زبان های اصلاحا imperative مثل C فرق میکنه، پیشنهاد میکنم قبل از هر چیز لینک زیر رو مطالعه کنید اگر قبلا نکردین، بعد در موردش کامل بحث کنیم

1 پسندیده

اگر میشه مثال بالا رو در الیکسر به روش دومی که گفتید هم اینجا بزارید که شفاف سازی بشه :thinking:

1 پسندیده

درود @toomaj جان .

گفتم خدمتتون در پست اول چیزی تو ذهنم نیست ولی یک مثال دیگه می زنم

من یک اطلاعات به صورت آرایه دارم و اون رو در head | tail می زارم . و بجای استفاده از for می یام در تابعی هر دفعه که هد رو نمایش می دهم و دوباره tail را به به همین تابع برگشت می دهد تا زمانی که دیگر head باقی نماند . به این صورت فکر کنم تا تمام اطلاعات داخل آرایه تمام نشه همه رو چاپ می کنه . همین کارو با فور هم می شه انجام داد

البته بازم صحبت من در تئوری هست

میتونی همین رو با for هم پیاده کنی اما باز هم در اصل recursion هست.
در فانکشنال پروگرمینگ ایجاد حلقه با استفاده از توابع بازگشتی صورت میگیره

1 پسندیده

کیبوردم مشکل داره

1 پسندیده

پس در هسته هیچ تفاوتی ندارند ؟ درسته ؟

منظور در kernel الیکسر هست؟

1 پسندیده

بله . منظور همون هست . به عنوان مثال اگر بخوایم هر دو رو تست بکنیم از نظر سرعت بر اساس حرف های شما در بالا , هر دو حالت به وسیله موارد بازگشتی انجام می شود پس سرعتشون یکی هست ؟

می خوام ببنیم من آیا باید همیشه به این فکر کنم در پروژه در صورتی که خوانایی کد زیاد پایین نیاد و بتونم مثل اولین راه حل داخل یک فانکشن با صدا زدن دوباره فانکشن انجام بدم یا سریع یک for بزارم انجام بشه

1 پسندیده

این موظوع به kernel مربوط نمیشه چون متد هایی که ما مینویسیم در kernel قرار ندارن

بسته به پیچیدگی و نوع عملیاتی که قراره انجام بشه باید انتخاب کنید، Comprehension ها در الیکسر بسیار قدرتمند هستند که در لینک زیر توضیح داده شده

1 پسندیده

فکر میکنم که حلقه بازگشتی نداریم.
تابع بازگشتی داریم.
چراکه باید صدا زد تابع رو.
ولی حلقه رو چطور میخوای صدا بزنی؟

1 پسندیده

بله درسته، پوزش میخوام، هرچند پیدا نکردم جایی رو که این اشتباه رو کردم اما اگر راهنمایی کنید درستش میکنم

اگر منظور شما اینکه در برنامه نویسی فانکشنال حلقه وجود نداره باید بگم من ترجیح میدم که بگم شکلش فرق میکنه.
اینجا بحث ما بر سر صدا زدن حلقه نبود هرچند حلقه هم قابل فراخوانیه مگر اینکه من متوجه منظور شما نشده باشم

حلقه وجود نداره :open_mouth::hushed::slightly_frowning_face:
نه قعطن که منظورم این نبود که.
فراخوانی ها رو منظورم بود , توو توابع بازگشتی.
رو صبحتم هم با دوستی که سوال رو مطرح کردن بود.

1 پسندیده

پس کلا اشتباه متوجه شدم! :metal:

1 پسندیده