۶ متد آرایه جاوا اسکریپت برای کدنویسی بهینهتر – راهنمای کاربردی


باید توجه داشته باشید که در حوزه برنامهنویسی همه چیز در شیءگرایی خلاصه نشده است. زمانی که از «برنامهنویسی تابعی» (functional programming) صحبت میکنیم، در واقع بیشتر با پردازشهایی سر و کار داریم که شما را از نقطه الف به نقطه ب میبرند، تا این که بخواهیم بدانیم دادهها و گروههای مختلف منطق تجاری چگونه سازماندهی شدهاند. در این مقاله به بررسی انواع متد آرایه جاوا اسکریپت میپردازیم.
جاوا اسکریپت زبانی است که مستعد نفوذ الگوهای دستوری (imperative) است، چون انتخاب این روش آسان است. توسعهدهندگان زیادی میل دارند که کدشان را به روش «رویهای» (procedural) بنویسند. در این روش یک مشکل در رویه میتواند موجب از کار افتادن کد و یا ایجاد باگهای جانبی شود. به همین دلیل است که الگوهای تابعی مطرح شدهاند.
مروری بر مبانی برنامهنویسی تابعی
کدهای جاوا اسکریپت زیادی با الگوی رویهای یا دستوری نوشته شدهاند. اینها کدهایی هستند که روش نوشتن آنها بازتابی از گردش فکر است و در نتیجه یک سری از وابستگیها برای زنجیرهای از کارها ایجاد میکنند.
به مدل رویهای زیر توجه کنید:
Start. Check computer power status if on, proceed to next step. Else proceed to turn computer on. Enter password. If password accepted, proceed. Else try again. Open browser. Start browsing the Internet. End.
هر گام در رویه فوق باید به ترتیب اجرا شود تا خروجی نهایی رخ دهد. در برخی شرایط یک الگوی رویهای لازم است، اما در همه سناریوها لزومی ندارد.
برخی سناریوها وجود دارند که در آنها ترتیب چندان اهمیتی ندارد. برای نمونه وظیفه تهیه قهوه فوری چنین است. مهم نیست که ابتدا شکر یا پودر قهوه را در فنجان میریزید. تا زمانی که همه چیز درون فنجان ریخته میشود، مشکلی وجود نخواهد داشت. این همان مفهوم برنامهنویسی تابعی به صورت خلاصه است.
در جاوا اسکریپت در اغلب موارد با آرایهها کار میکنیم، اما توسعهدهندگان زیادی وجود دارند که میل دارند در صورت عدم ضرورت از الگوی دستوری استفاده کنند. حلقههای while و for میتوانند برای فیلتر کردن، یافتن یا انجام کاری روی هر مقدار درون آرایه استفاده شوند.
با این حال اگر بخشی به درستی کار نکند، اجرای فرایند به پایان نمیرسد یا به نوعی از کار میافتد و تابعهایی که به مقادیر صحیح وابسته بودند نیز در نتیجه از کار میافتند.
()filter() ،find() ،map() ،reduce() ،every و ()some شش متد آرایهای در جاوا اسکریپت هستند که برای جلوگیری از بروز چنین مشکلاتی به فراوانی مورد استفاده قرار گیرند. استفاده از این متدها در کد جالب است زیرا برای عملکرد خود نیازی به وجود یک حالت (State) ندارند.
شیوه استفاده از ()filter
()filter متدی است که امکان ایجاد یک آرایه جدید بر مبنای شرایطی که از روی یک آرایه موجود به صورت true ارزیابی شده است را فراهم میسازد. به مثال زیر توجه کنید:
مثال فوق یک الگوی رویهای دارد که غالباً به عنوان روشی برای تعریف حلقه روی هر آیتم در آرایه، تست شرط و سپس ارسال آن به آرایه میبینیم.
با استفاده از متد ()filter کافی است شرط را تعیین کنید:
در کد فوق باید متد فیلتر را روی یک آرایه تنظیم کنیم. تابع بینام اجازه میدهد که a نماینده یک آیتم منفرد در آرایه باشد که به همان روش a = animals[i] در الگوی رویهای عمل میکند. هر چیزی که از ()filter بازگشت یابد آن را در آرایه جدید قرار میدهیم.
شیوه استفاده از ()find
()find در جاوا اسکریپت برای ایجاد یک شیء جدید بر مبنای شرط تعیینشده استفاده میشود. در ظاهر شبیه به ()filter است، اما در باطن چنین نیست. ()filter یک آرایه از اشیای مطابقت یافته بازگشت میدهد، در حالی که ()find نخستین شیء مطابقت یافته را بازمیگرداند. به مثال زیر توجه کنید:
()find در نخستین مورد مطابقت یافته میایستد، در حالی که ()filter ادامه میدهد تا این که همه آیتمهای مطابقت بافته در آرایه را بازگشت دهد.
شیوه استفاده از ()map
فرض کنید آرایهای دارید اما میخواهید متفاوت به نظر برسد. میتوانید با استفاده از تابع ()forEach روی آن حلقهای تعریف کنید، اما این امر در ادامه موجب بروز پیچیدگیهایی میشود.
نگاشت کردن یا استفاده از map به شما امکان میدهد که با مقادیر کار کنید، آنها را به سلکتورهای متفاوتی بازطراحی کنید و هر کار دیگری که دوست دارید روی آنها اجرا نمایید. نتیجه ()map یک شیء است که امکان ذخیره جفتهای کلید/مقدار یا صرفاً یک آرایه از مقادیر ساده را میدهد. به مثال زیر توجه کنید تا ساختار آن را دریابید:
شیوه استفاده از ()reduce
گهگاه خبرهایی در مورد reduce میشنویم، اما هیچ کس دقیقاً نمیداند که دقیقاً چه کار میکند. به طور خلاصه ()reduce امکان تعامل یافتن دو مقدار یا شیء را که از سمت چپ به راست مجاور هم هستند فراهم میسازد.
برای نمونه فرض کنید آرایهای به صورت [100 ,20 ,10] دارید. اگر بخواهید از ()reduce روی آن استفاده کنید، نخستین مجموعه از مقادیر 100 و 20 خواهند بود. سپس خروجی آن هر چه باشد برای تعامل با 10 استفاده میشود.
()reduce میتواند دو آرگومان نیز بگیرد. آرگومان نخست تابعی است که تعیین میکند بر سر دو مقدار نخست چه آمده است و تابع دوم مقدار آغازین را تعیین میکند.
شیوه استفاده از ()every
متد every بر اساس شرط تعیین شده یک مقدار true یا false بازگشت میدهد. طرز کار آن شبیه به ()filter است اما به جای بازگشت یک شیء یا مقدار، این متد یک مقدار بولی بازگشت میدهد:
بدین ترتیب ()every به گزینهای مناسب برای بررسی این نکته تبدیل شده است که آیا همه چیز درون یک آرایه معیار تعیین شده را دارد یا نه.
شیوه استفاده از ()some
طرز کار ()some مشابه ()every است، اما تنها یک شرط باید true ارزیابی شود تا نتیجه درست باشد. به مثال زیر توجه کنید:
در کاربردهای واقعی باید از ()every و ()some برای بررسی مقادیر درون آرایه پیش از ارسال آنها به پایگاه داده استفاده کنید.
همچنین میتوانید با بهرهگیری از آنها مطمئن شوید که پیش از اعمال یک تخفیف معین، دسته خاصی از یک آیتم در یک سبد خرید وجود دارد یا نه. یک کاربرد دیگر آن زمانی است که یک سیستم رزرواسیون را کدنویسی میکنید و میخواهید مطمئن شوید که همه مشتریهایی که میتوانند رزرو کنند دارای شرط کمینه سنی مورد نیاز هستند.
ترکیب متدها
میتوان از متدهای آرایهای به صورت مستقل یا به صورت ترکیبی نیز استفاده کرد. نتیجه متد اول به عنوان مقدار متد بعدی استفاده میشود. به مثال زیر توجه کنید:
بسته به مجموعه دادهها میتوانید کارهای کاملاً مؤثری روی آرایه اجرا کنید و نیاز به تعریف دستی حلقه روی همه آرایهها و الزام آنها به انجام کارهای مورد نظر را کاهش دهید.
سخن پایانی
جاوا اسکریپت میتواند بسیار کارآمدتر باشد؛ در صورتی که زمانی را صرف یادگیری صحیح آن بکنید. توسعهدهندگان مبتدی جاوا اسکریپت عموماً در دام الگوهای رویهای میافتند زیرا آسان هستند.
با این حال این الگوها زمانی که با بیش از یک حلقه for یا while سر و کار داشته باشید، به سرعت به کلاف درهم پیچیدهای تبدیل میشوند. متدهای آرایهای از بسیاری از اشتباهات که خاصیت کدهای طولانی هستند، براکت های تو در تو و نقطهویرگولهای فراموششده جلوگیری میکنند.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای JavaScript (جاوا اسکریپت)
- آموزش JavaScript ES6 (جاوا اسکریپت)
- مجموعه آموزشهای برنامهنویسی
- جاوا اسکریپت چیست؟ — به زبان ساده
- ۱۱ ترفند بسیار کاربردی جاوا اسکریپت — به زبان ساده
==
سلام مقاله بسیار خوبی بود ممنون بابت ترجمه بسیار خوبی که داشتید.
فقط یک بخش از کد ها رو جا انداختین و برای همین کد مربوط به ترکیب متدها رو نذاشتین !
سلام امیر عزیز؛
مشکلی که فرمودید اصلاح شد.
ممنونیم از توجه شما و به داشتن خوانندگان دقیقی مثل شما افتخار میکنیم.
راهتمای خیلی عالی بود.