ماهي الطريقة الأقرب للOOP في التكرار؟ هل هي الLoop ام الRecursion ؟ الCompilers صنعت نماذج برمجية (اوهام) ليسهل على الدماغ البشري استيعابها. في شيء اقرب للألوان التي ليس لها وجود حقيقي فهي فقط ترددات معينة للضوء. بنفس الطريقة لا يفهم الكمبيوتر لا الLoop ولا الRecursion.

التكرار iteration أحد اعمدة البرمجة الثلاث بعد الSequence و Branching مع انه يمكن تحقيق الiteration من خلال الBranching حيث يمكن تنفيذ التكرار بواسطة if و Goto و هي الطريقة الاقرب للكمبيوتر كما في الAssembly.
فجمل If و Goto هنا تدمج و تستبدل في الAssembly بتعليمات مثل JLE و JNE و JL و غيرها حسب الFlags المناسبة فتكون بهذا for-loop وشقياتها كwhile و do قد وفرت علينا تعلم حوالي من 20 الى 30 تعليمة من تعليمات الAssembly.
اللغات الFunctional لا يوجد بها for-loop و تعتمد الRecursion فقط. فلا تحتاج لاسناد متغيرات بداخل ما تحاول تكراره ولذا هي آمنة لتتنفذ بأي ترتيب على اي Core او نواة من انوية المعالج. ولأن الFP معتمدة على نموذج رياضي فلا يمكن التعبير فيها بطريقة Imperative كما هو الحال في الloop.
تاريخياً في لغة فورتران كان هناك Do و كانت طريقة كوبول اقرب للFor-loop الحالية من خلال PERFORM VARYING و UNTIL. اما For-loop بشكلها الحالي فأتت مع ALGOL التي هي حقيقة ام اللغات الحديثة وليس C.
لكن حتى ALGOL أخذتها من لغة برمجة المانية قديمة 1951 اسمها Superplan كانت التعليمة Für بدل For وهذه اللغة تطوير لأول لغة في العالم Plankalkul.
التاريخ مهم. فهو يبين مراحل سعي الانسان نحو نمذجة الاشياء و تحسين تصورها بشكل افضل لدماغه ليسهل له التحكم بها. كما نمذج الذرة و غيرها من الجسيمات دون الذرية التي لا يمكن أن ترى. لكن ساعدته النمذجة في فهمها ومعرفة قوانينها.
نعود للسؤال الأول, اذا كانت OOP اتت لمنذجة العالم الحقيقي كobjects , classes لها state و behaviors فكيف نصف عمليات التكرار التي نقوم بها واقعنا؟ هل هي Loop ام Recursion ؟
لدينا لغتين يمكن اخذهما “افتراضياً” كمعيار لما تجب ان تكون عليه الOOP هما Smalltalk و Simula. الاولى لديها whileTrue اذا كانت بشرط و لديها timesRepeat اذا كان عدد المرات معروف مسبقاً. لكن ايضاً لديها طرق اخرى ساذكرها لاحقاً.
اما Simula ففيها For-loop اشبه بلغة بيسك و باسكال. لكن هل هذه الطرق تشبه طرقنا للتكرار في الحياة الواقعية و التي اتت الOOP لنمذجتها و محاكاتها؟
فلسفة الOOP الاساسية هي عمل نمذجة Modeling و محاكاة Simulation للواقع و نحن نكرر الاشياء في حياتنا الواقعية و تكرارنا يعني ان هناك في الأصل مجموعة اشياء Collection نقوم بتكرار عملية معينة على كل foreach عنصر من عناصر تلك المجموعة .
لغة Smalltalk كونها اول لغة OOP لم تأتي بجديد فبالاضافة لطريقة WhileTrue و Do السابقة فهي لديها مفهوم الIterator وهو مفهوم مستعار من الFunctional programming.
الIterator هو نفسه الforeach او الMap او for in في لغات مثل Java و #C و JavaScript وبايثون عندما نتعامل مع الCollections كالArrays. لكن هل نعتبره هو الطريقة الOOP الأمثل للتكرار؟ لأنه من الواضح ان for-loop او do او while ليست من ال OOP في شيء.
ماهي الطريقة الأقرب للOOP في التكرار؟ هل هي الLoop ام الRecursion ؟ الCompilers صنعت نماذج برمجية (اوهام) ليسهل على الدماغ البشري استيعابها. في شيء اقرب للألوان التي ليس لها وجود حقيقي فهي فقط ترددات معينة للضوء. بنفس الطريقة لا يفهم الكمبيوتر لا الLoop ولا الRecursion.
(سلسلة)— Ahmed Aljaberi (@ahmed_aljabri) March 4, 2022