اشکان حیدری‌فاضل
اشکان حیدری‌فاضل
خواندن ۲ دقیقه·۳ سال پیش

نامگذاری نامناسب متد ()Array.prototype.reduce !!

در باب نامگذاری متد reduce
در باب نامگذاری متد reduce

بارها از برنامه‌نویسای JavaScript شنیدم که می‌گن:

انصافاً اگه من قرار بود برای این متد اسم انتخاب کنم، reduce رو انتخاب نمی‌کردم. چه اسمیه؟!
مثلاً map قشنگ از اسمش معلومه می‌خواد چیکار کنه! یا filter، همین که نیگاش می‌کنی بهت میگه میخواد برات چه کاری انجام بده! اما reduce ...

روزای اولی که داشتم با این متد آشنا می‌شدم، تقریباً موافق بودم... نمی‌فهمیدم چه ربطی داره!
اما الان کاملاً برام روشنه؛ اتفاقاً بنظرم خیلی اسم هوشمندانه و درستی انتخاب کردن.

چرا اینطور بنظر می‌‌رسه که اسم بدی براش انتخاب شده؟

بعید می‌دونم "همه" واقعاً چنین نظری داشته‌باشن که این اسم، اسم مناسبی نیست. اما وقتی دقت کردم، دیدم افرادی که چنین عقیده‌ای دارن، دوتا ویژگی مشترک داشتن:

  1. هنوز درک روشنی از عملکرد متد ()reduce ندارن
  2. به معنای دقیق این واژه توجه‌ی نکرده‌بودن

متد ()reduce چکار می‌کنه؟

- - - - - - - - -
در آینده، یک پست در رابطه با عملکرد متد ()reduce منتشر می‌کنم و به این پست لینکش می‌کنم
- - - - - - - - -

معنای لغوی reduce چیه؟

You reduce something when you lessen its volume, size, or degree.

The word reduce first appeared in Old French during the 14th Century, when it meant "bring back." From the Latin re, which meant "back," coupled with ducere, meaning "bring or lead" — we ended up with reduce. The current meaning, "to lessen," appeared in the late 1700's, drawn from the word's military use, "reduce to ranks," which meant break into smaller units. Cooks use the word reduce when they reduce a liquid, boiling it down until it has less volume and is thicker.

cite: vocabulary.com

وقتی یه چیزی reduce می‌شه، درواقع یک کاهشی در مقیاس اون چیز اتفاق میوفته؛ یا حجمش کمتر میشه، یا تعدادش، یا زاویه‌ش، ...

اولین کاربرد واژه‌ی reduce برمی‌گرده به قرن 14 میلادی در فرانسه به معنی "به عقب آوردن، به عقب کشاندن، برگرداندن".
که خب از ریشه‌‌ی لاتین‌ش نشأت می‌گرفت؛ re به معنی "عقب، به عقب" و ducere به معنی "آوردن، کشاندن، رساندن، بردن، ..."

اما از اواخر صده‌ی 17 میلادی تا امروز، با معنیِ "کم کردن، کاهش دادن، تقلیل یافتن" دیگه داره استفاده می‌شه؛ که این معنی جدید هم از کاربرد نظامی‌ش آب می‌خوره که به معنی "خورد شدن به یگان‌های کوچیک‌تر" بود.

الان مثلاً یکی از کاربردای امروزی این واژه رو بین آشپزا می‌شه دید. وقتی می‌شنویم که یه آشپز داره می‌گه "الان وقتشه که این سس یا شیر یا مایه رو reduce کنیم" منظورش اینه که قصد داره یه مقدار اون مایع رو بجوشونه، تا حجم مایع کمتر بشه که در نتیجه غلظتش بیشتر بشه.


○ حالا ارتباطش با متد ()reduce چیه؟

متد ()reduce هم دقیقاً همین‌کار رو می‌کنه؛ دقیقاً داره reduce می‌کنه. میاد آرایه‌ای که مثلاً 100 تا آیتم در خودش داره رو می‌گیره و reduceش می‌کنه به یک آیتم و بهت پس می‌ده.

اسم از این تمیزتر؟!


جمع بندی

بنظرم تأثیرگذارترین عاملی که باعث می‌شد برخی افراد درمورد نامگذاری این متد، قضاوت نادرستی داشته‌باشن، نپرداختن به معنای لغوی reduce بود؛ چون درست بعد از روشن شد معنای لغوی، دیگه reduce هم مثل filter و map، به وضوح بهشون می‌گفت که قراره چه کاری براشون انجام بده.

امیدوارم با خوندن این پست، هم توی JavaScript با اسم ()reduce، و هم توی React با هوک useReducer بیشتر دوست شده‌‌باشید.

javascriptarrayآرایهجاوااسکریپتreduce
Front-end Developer | Graphic Designer
شاید از این پست‌ها خوشتان بیاید