lec_4__concepts
بسم الله الرحمن الرحيم، إزيكم يا شباب عاملين إيه؟ دي Lecture 4 Concepts، بإذن الله الـ Lecture دي هيتشرح فيها الـ High Order Functions وهيتشرح فيها يعني الـ Classes والـ Methods.. يعني شوية كلام عن الـ Classes كدة في الآخر، في الأول برضه الـ Pattern matching..
قبل ما نبدأ كدة ما تنسوش تصلوا على النبي وتدعوا لإخواتنا في فلسطين. 
إيه هو الـ pattern matching أصلاً؟ الـ matching.. الـ pattern matching ده عامل زي الـ switch cases في الـ Java، بيقعد إيه يـ match أي حاجة مع.. يعني يـ match الـ input اللي إنت بتدخلهوله مثلاً أو variable X مثلاً..
مع إيه؟ مع شوية cases إنت حاططها لها، بس بيقولك إن فيه فرق ما بين الـ Java
 والـ switch case، إن الـ.. إن الـ switch case ممكن ترجع حاجة، وبيقولك برضو إن هي إيه.. يعني لازم إن إنت تحط لها default اللي هو.. عارف إنت في الـ Java لما..
لو مثلاً بتقول case إن هو ده هيساوي واحد، ده هيساوي اتنين، ممكن بس تكتفي بكده، وممكن تحط case default إن هو مثلاً مكنش ولا واحد ومكنش ولا اتنين، فده يعني.. فده برضو في الـ
ده في الـ الـ Scala لازم تعمل، لازم تعمل إيه اللي هو الـ default، وهنشوف بنعملها إزاي يعني.
وبيقولك إن هي هتـ match error
 if no pattern matches، ده.. دي اللي هو بتكلم عليها الـ default يعني، فإنت بتقول مثلاً عندك إيه.. هتاخد input من الـ user، الـ input ده بتقعد تعمل عليه match، حاجة اسمها match، الـ match ده بتشوف لو هو كان case 1 أو case 2 أو case 3 
 4 أيًا يكن، بعد كدة تعمل.. لازم تعمل default، لازم تعملها يعني، دي مش..
مش اختياري، لا، بتكتب case بعد كدة underscore، ديت كدة إيه؟ دي اللي هي الـ default بتاعتك يعني. فهو هنا كان مدخل في الـ input اتنين، بعد كدة راح مطلعله إيه؟ الـ case 2 يعني. هو بيقولك هنا إن الـ underscore ديت denoting anything else، يعني أي حاجة تانية، اللي هي الـ default يعني في الـ Java
الـ user return values also، يعني هي إنت تقدر تستعمل فيها كلمة الـ return، وبيقولك إن إنت تقدر تعمل بيها assign لـ variables، يعني إنت ممكن مثلاً تقول هنا إيه؟
 var result مثلاً هيساوي الكلام ده كله، سواء var أو val عادي يعني مش هتفرق.
هو هنا.. هو قاعد يقولك هنا val output هيساوي كذا، ودخل Hi في الـ input.. في الـ input هنا اللي عمل عليه match، راح مطلعله إيه؟ Informal greeting يعني. هنا بيقولك match is used as the body of the method، عادي إنت.. يعني هو block of code عادي، إنت ممكن تحطه في أي حتة، ممكن تحطه في الكود بتاعك عادي، ممكن تحطه في الـ ..
في الـ methods ممكن تحط في الـ functions، ممكن تحط في objects، 
عادي يعني مش هيقولك لأ، مفيهوش أي حاجة creative يعني، هو عادي block of code زي الـ switch case عادي مفيهاش أي امتيازات يعني. ندخل على الـ high order functions، إحنا كنا خدنا في الـ high order functions إن إنت عندك الـ function بتديها parameter function اصلا.
يعني function بتاخد parameter.. بتاخد parameter functions تانية،
 ديت بقى هنشرح فيها إن إنت هيبقى عندك function عايز تـ.. تخلي الـ function ديت 
بتـ return ليك function تانية. طيب هنـ.. هنستفيد إيه من الكلام ده؟ يعني ممكن نبقى نشوفلها حاجات.. أبسط مثال كنا شفناه لو تفتكروا الـ foldLeft اللي إحنا كنا خدناها في الايه؟...
في الـ شوية high order functions كدة مشهورة زي الـ كنا واخدين for each و map و reduce و كنا واخدين برضو الـ fold left الـ fold left دي كنا بنديها مثلاً initial value بتبدأ بيها كنا بنديها كدة ايه fold left و بنديها الـ initial value بين القوسين كدة
وبعد كدة بنفتح أقواس تانية وبنديها الـ parameters التانية. هي ليه في قوسين لوحدها ودي في قوسين لوحدها؟ لأن دي أصلاً بتـ return معاك function، الـ function ديت بتحطها إيه.. يعني الـ function ديت بتحطها وبيلزق جنبها بقى الـ parameters التانية. أنا حاسس إن الكلام مش واضح شوية، بس يعني ممكن أحاول أوضحه بـ .. إحنا هنا كان عندنا مثلاً الـ foldLeft..
foldleft كنا بنديها مثلاً إيه initial value، say إن هي كانت بـ 5 مثلاً وبنقفل، وبعد كدة بنفتح الـ إيه الـ conditions بتاعنا، الـ conditions بتاعتنا وبعد كدة إيه بنقفل، فهو ده أصلاً كانت function بتـ return ليك function تانية، say إن هي F2 وبياخد الـ parameters دي كلها.
وبيديها للـ f2 فهو نفس الconcept بتاع الـ function اللي بتـ return
 function تانية هو بقى بيقولك أن الـ high order function بيبدأ نفس الكلام تاني اللي هي الـ function بتاخد parameter function تانية أو function بتـ return function بيقولك high order function can return a function
تمام.. wait
 Consider the following simple sayHello function 
دي عندك function عادية خالص اسمها sayHello بتـ print 
Hello والاسم. ديت high order function can be defined as كذا. إنت عندك function اسمها Greeting..
ده الـ return type بتاعك،
 الـ return type بتاعك هو function أصلاً، فإنت عندك function بتـ return
 function. مش إنت لو كان عندك مثلاً إيه؟ function عادية، لو أخدت بالك دي function مثلاً عادية اسمها sayHello، الـ return type بتاعها Unit. لا، دي بعد النقطتين اللي هو بعد
 الـ return type..
function تانية أو signature بتاع function إيه هو الـ signature بتاع function؟ أي function هتدخل عندك في الـ parameter string وتـ return عندك unit فـ الـ function دي هتنفع. يعني لو إنت إديتها anonymous function بتاخد string وبترجع unit قشطة، إديتها.. إديتها built-in function بتاخد string وبترجع unit تمام مش هيقول لك لأ.
اديتها user defined function انت اللي عاملها بتدخل string وترجع unit برضو عادي مش هيقول لك لا بتساوي say hello دي دي الـ value او الـ function اللي انت هتـ run ـها يعني هو بيقولك ده signature of the function اللي هيتعمل لها return يعني ودي الإيه...
دي الـ body بتاع الـ High Order Function، ده الـ body بتاع الـ function.
The High order function takes zero parameters
 دي الـ High Order Function ما بتاخدش ولا parameter
اللي هي Greet مابتاخدش ولا أي parameters  الـ
 function to be returned accepts single string parameter and returns unit؛ بتاخد single parameter اللي هو string وبترجع unit، نفس الكلام اللي إحنا قلناه.
Calling the function should look like
 لما تيجي تـ call الـ function ديت بيقولك Greeting method مثلاً. إحنا قلنا لما تيجي تقول val أو var أو اللي هو variable يعني بيشاور على function أو بيساوي function، فده مش بيساوي الـ function نفسها، هو ده pointer بيشاور على الـ function. فإنت لما تقوله Greeting method فهو بيقولك..
خد، ده هي function هتعملك greeting method، اللي هي إيه؟ 
اللي هي الـ function بتاعة greet، كانت بتاخد parameter إيه؟ كانت بتاخد parameter string
بتاخد parameter string وبترجعلك إيه؟ بترجعلك الـ function بتاعت sayHello. طيب sayHello كانت بتقولك إيه؟ الـ string اللي كان داخلك هتعمل معاه إيه؟ hello +
 الـ string اللي كان داخلك.
فهو الـ output هيطلع معاك Hello + الـ string اللي كان داخلك، اللي هو إيه؟ 
كان John Smith
 We can use anonymous function as well، بنفس الأسلوب عادي جداً. عندك function اسمها Greet بتاخد string وبترجع Unit، ده الـ return type أصلاً بتاع Greet، يعني هي Greet ديت بتـ return function..
الـ Name.. بتاخد دي الـ anonymous function بتاعتك، إحنا قلنا بعد الـ equal بيبقى
 الـ function اللي هيتعملها run، الـ function اللي هي الـ body بتاع
 الـ High Order Function اللي اسمها greet ده الـ body بتاعها. الـ body بتاعها إيه؟ anonymous function بتاخد name وبترجع print hello name 
طيب هل ده...؟
Name String؟ آه String. هل ده Unit؟ آه Unit. يبقى الـ anonymous function دي كلها على بعضها تنفع تنفع معاك ليه؟ لأن هي بتاخد نفس الـ signature يعني من الآخر، بتاخد String وبترجع Unit. الاسم اللي هتدخله هتـ print 
Hello + الاسم، أو هتعمل concatenate ما بين كلمة Hello والاسم. بيقولك ده
 الـ signature بتاع الـ Lambda function.. الـ Lambda function اللي هي
 الـ anonymous function يعني.
ده الـ to be returned، وده الـ Unit يعتبر يعني. 
it gives the same result as the former example. 
it is possible to pass parameters to the higher order function
 إنت ممكن تديها parameters؟ آه عادي إنت ممكن تديها، يعني إحنا هنا ما كناش مديينها مثلاً حاجة في الـ greet، ديت عادي إنت ممكن تقوله saySomething، 
greeting string..
String.. يعني بتـ return function، الـ function ديت بتاخد parameter string وبترجع Unit، هتساوي anonymous function. الـ anonymous function ده اللي هو الـ body بتاع الـ saySomething. الـ body بتاع saySomething إيه؟ 
string عندك اللي هو نفس الـ signature بتاع دا هي، name اللي هو string.. Unit اللي هو
println greeting + name
فهو هياخد الكلمة اللي هتديهاله في الـ parameter الأولاني، ويـ concatenate عليها الكلمة اللي هتديها له في الـ parameter التاني. فلو شفت ديت هتلاقيها مثلاً إيه؟
 saySomething، وبعد كدة قوسين greeting مثلاً say Hi، وبعدها إيه؟ أقواس تانية Ahmed مثلاً، فهتلاقيها عملت معاك كدة.. Hey مثلاً John Smith.
ده لو تفتكروا نفس الشكل بالظبط بتاع الإيه؟ بتاع الـ foldLeft. كانت بتكتب مثلاً إيه؟
 foldLeft كدة، وبعد كدة بتديها 5 أو الـ initial value، وبعد كدة بتديها إيه؟ هنا الـ إيه
 الـ body بتاعك اللي إنت عايز تديهوله. فالـ 5 ديت كانت بتاعت الـ High Order Function.. ده الـ parameter بتاع الـ High Order Function.
إنما ده الـ parameter بتاع الـ function اللي هي returned من جوه الـ إيه.. 
من جوه الـ High Order Function. يعني إيه الكلام ده؟ يعني ثانية كدة.. يعني لو نرجع هنا كدة هتلاقي إن الـ greeting دهي هي هياها الـ 5 دي، اللي هي كانت دخلالك أصلاً
 للـ.. داخلة لـ كلمة saySomething.. للـ هي الـ function اللي اسمها saySomething اللي هي الـ High Order Function. فالـ 5 دي كانت داخلة للـ foldLeft اللي هي الـ function 
الـ High Order Function.
طيب والـ body بتاع الـ code ده اللي هو الـ logic نفسه بتاع  الـ code بتاع الـ foldLeft كان داخل للـ function اللي هيتعمل لها return من الـ foldLeft لما يدخل لها 5. 
يعني John Smith هتبقى parameter للـ function اللي هترجع من ده هي.
يعني ده هي هتـ return معاك function هتديها الـ parameter ده هو. ده الشرح باختصار يعني. ده الـ output اللي هيطلع معاك. بيقولك
 note that this time the greeting is passed as a parameter، 
يعني مكناش إحنا اللي كاتبينه إحنا كنا زمان كنا عاملينها.. في الأول يعني كنا عاملينها إيه؟ Hi + الاسم اللي هيدخلك، لأ، دلوقتي إحنا مديينها two parameters؛ مديينها الـ greeting نفسها ومديينها إيه؟ الاسم اللي إنت عايزه.
Is it possible for the function return to have a return type؟
آه، عادي جداً. إنت دلوقتي عندك 4 functions
Add و Sub و Multiplication و Division. 
كل function من دول بتاخد two parameters..
الرقم.. رقم double يعني two numbers كل واحد فيهم double وبتـ return معاك double. وكل function من دي الـ body بتاعها أو هي بتعمل إيه من الآخر يعني دي بتجمع، ودي بتطرح، ودي بتضرب، ودي إيه؟ بتعمل division يعني، بتعمل division يعني  بتقسم.
 الـ Higher Order Function can be defined as..
"الـ High Order Function بتاعتنا هنعمل function اسمها math، math ديت بتاخد string.. بتاخد إيه؟ string. طيب ماشي، الـ return بتاع function math ديت إيه؟ هو عبارة عن function، الـ function ديت بتاخد two parameters وبتـ return parameter كمان.. وبتـ return sorry بتـ return double. طيب إيه هما الـ parameters دول؟
 double و double.. يعني أي function..
هتديها لها double و double وهتـ return معك double، ينفع تديها ينفع تحطها قصدي بعد الـ إيه.. بعد math والـ name بتاعها. يعني إنت هتكتب مثلاً math أي name وبعد كدة إيه؟ هتقفل الأقواس وتديها مثلاً function  أي function بقى من الأربعة اللي فاتوا دول، ما هو الأربعة اللي فاتوا دول كانوا بياخدوا double و double وبيعملوا return لـ double
هتساوي بقى.. هتساوي إيه؟ num1 double و num2 double. 
num1 و num2 دول الـ parameters اللي داخلين، هيدخلوا على الـ matching. الـ matching ده هيشوف لو الـ case لو الـ name ده الـ name اللي كنت مديه في الأول كان addition ساعتها هيدخل على Add، لو subtraction ساعتها هيدخل على subtract، لو multiplication ساعتها هيدخل على multiplication، لو division هيدخل على division.
وهياخد الـ num1 والـ num2 اللي إنت كنت مديهمله في الـ parameter وهـ ايه؟ وهيعوض فيهم في الـ equation بتاعة الـ.. اللي بتـ match مع الـ case بتاعتها يعني. فإحنا كدة عملنا يعتبر إيه؟ calculator كاملة مثلاً في إيه؟ في كام سطر، يعني في أربع خمس سطور. فدي فائدة الـ High Order Functions هتلاقي إن الكود بتاعك more readable و concise قوي، يعني هتلاقي صغير جداً ومختصر.
وبيعمل إيه.. يعني efficient، حرفياً الكود efficient جداً.. الكود صغير وبيعمل اللي عليه. هي function بتديها.. هو هنا بيعيد نفس الكلام يعني.. بتديها الـ name، هتديها مثلاً كلمة addition، ساعتها هيدخل على الـ case ديت وهياخد الرقمين اللي إنت مديهمله في
 الـ parameter وهيعوض بيهم في الـ equation بتاعة الـ Add. 
في الـ Subtraction نفس الكلام، في الـ Multiplication نفس الكلام، في الـ Division نفس الكلام. الفكرة بس إن إنت بتديها كـ parameter
 math وبتديها كلمة addition أو subtraction أو multiplication أو division.
وبعد كدة بتفتح الأقواس وتديها الـ إيه.. وتكون مديها الرقمين التانيين اللي إنت عايزهم. بيقولك دي الـ parameters بتاعة الـ High Order Function، دي الـ parameters أو ده
 الـ signature
 sorry بتاع الـ إيه.. الـ function اللي هتديها لها، أي function بقى من الأربعة اللي إحنا قلنا عليهم دول.. ودي الـ switch case بتاعة الـ.. أو sorry اسمها الـ..
الـ match يعني بتاعت الإيه.. بتاعت الـ case على حسب اللي إنت دخلته من الإيه.. من
 الـ string بتاع الـ High Order Function، الـ parameter بتاعها يعني. 
Calling that function should look like
 حاجة زي كدة يعني بالظبط؛ إنت هتقول math subtraction ، هتاخد ده تحطه في إيه؟ في variable، والـ variable ده هتديله الـ parameters، لأن إحنا قلنا ده هيبقى pointer على function. إنت..
يعني إنت بتقوله مثلاً إيه.. 
subFunc، فـ math وتديها subtraction، ده هيرجعلك إيه؟ هيرجعلك pointer على function، على function إيه؟ على الـ function اللي بتعمل subtract، فإنت قاعد تقوله إيه هاتلي الـ function اللي بتعملي subtract وإديها الـ parameters
 4 و2. طيب ما أنا ممكن أشيل أصلاً الكلام ده كله، أشيل اللي هي subFunc..
وأعوض عنها بقيمتها اللي هي إيه؟ math subtraction، فتلاقي عندك math subtraction وبعد كدة تديها أقواس تانية كدة 4 و2. 
فهو ده نفس اللي هيحصل؛ هتقوله println math subtraction و 4, 2. ده نفس الشكل بتاع الـ foldLeft كان fold و5 مثلاً وبعد كدة إيه؟ الـ body بتاع أو الـ logic بتاع الـ إيه.. بتاع 
الـ folding يعني.
أو Reduce.. كنت بتديها هنا اللي هي إيه الـ initial value اللي هيجمع بيها مثلاً أو 
هيـ concatenate عليها، وبتديله الـ logic بتاع الـ concatenate. فـ حرفياً ده نفس الإيه.. نفس الفكرة، اللي هو إنت بتديها أقواس لوحدها وبعد كدة أقواس تانية، أقواس تانية دي بتاعت الإيه.. بتاعت الـ function اللي جوه.
والأقواس اللي بره ديت بتاعة الـ parameters بتاعة الـ High Order Function.
 الـ output هيطلع معاك مثلاً بـ 2 لو هو مدخل subtraction
 4 و2. هنشرح الـ Classes دلوقتي بيقولك إن الـ Classes هي similar لـ الـ Classes في
 الـ Java.. بيقولك إن هي more concise إن هي مختصرة جداً عن Java، وبيقولك إن هي برضو بتسمح بالـ inheritance.
بتـ هي يعني إيه.. حاجة.. يعني هي تقريباً نفس الـ Classes اللي في Java، مافيش أي فرق خالص. أنا اتعاملت مع يعني حرفياً من قبل ما أتعامل أصلاً مع الـ Classes ومن قبل ما أشوف لها شرح يعني أو حاجة، كنت إيه جربت أكتبها مع نفسي كدة لقيتها اشتغلت عادي.. فيعني هي نفس الـ Classes اللي في Java مافيش أي فرق خالص.
بيقولك بتكتب class وبعد كدة Student، وبعد كدة إيه؟ بيقولك ديت بتـ create الـ class يعني معاك، عمل class اسمه Student. ولو إنت عايز مثلاً تعمل object طبعاً بتستعمل new keyword، فإنت مثلاً عايز تعمل object اسمه stud، فبتقول new Student، مش لازم تحط أقواس حتى لو هو إيه مش بتاخد إيه..
الـ Constructor بتاعها يعني اللي هو الـ default أو الـ Constructor بتاعها مش بياخد أقواس، فهو ساعتها بيـ run الـ Constructor عادي.
 You can define the fields of a class and create the required constructor in a single call.
 طيب هنا إنت عايز تعمل Constructor، الـ Constructor بتاعها بياخد إيه..
بياخد parameters اهي، فإنت ساعتها إنت ممكن تعملها أصلاً جوه الـ Student؛ هو ده الـ ده فرق أنا لاحظت  في الـ Java ماكنتش كدة، يعني إنت كنت بتـ create بتعمل method أو بتعمل function بنفس الاسم بتاع الـ class، ده كان في الـ Java. إنما هنا إنت مش محتاج تعمل كدة، إنت هنا بتكتب جنب اسم الـ class على طول الـ إيه الـ parameters اللي إنت عايزها ده val وده var، ده ID وده إيه؟ name.
Constructor parameters دي الـ parameters بتاعت الـ constructor، 
بيقولك ديت بتـ create يعني اللي هو إيه two fields للـ constructor بتاعك.. طبعاً إنت هنا مثلاً قاعد تقوله إيه val stud = new Student، إنت كدة قاعد تـ create 
student جديد.
بتعمل new Student يعني من الـ class وبتديله الـ initial value أو الـ sorry 
الـ parameters بتاعت الـ constructor فإنت هنا مديله الـ ID ومديله الـ name.
 طيب لو واخدين بالنا إن الـ ID كان val يعني كان value يعني كان constant، فإنت خلاص بمجرد ما اديته الـ 123 ساعتها إنت هنا مش..
إنت هنا مش محتاج إن إنت.. يعني مش هتعرف تـ update عليها، ونفس الشيء هنا. لو تفتكروا في المحاضرة الأولى أنا كنت قلت إن من الحالات اللي إنت عادي إن إنت ما بتعملش declare
 للـ variable فيها دي واحدة من الـ cases إن إنت بتعمل في الـ constructor، فإنت ساعتها هنا مش محتاج تدي initial value فساعتها لأن هو هياخدها من الـ user هنا.
وبرضو الـ case التانية لو مكنتش غلطان في الـ Abstract Class، لأن هو إنت.. هو كدة كدة بياخدها أصلاً وهو بيعمل Inherit. 
Note that once you created an object of class Student, you can only change the value of name but not ID.
 ليه؟ عشان إن ديت val وديت إيه؟ var عادي variable عادي ممكن يتغير.
بيقولك لو جيت تعمل ديت.. دي هتشتغل واللي تحت دي مش هتشتغل، لأن ده طبعاً إيه value. عندك الـ Constructors الـ Constructor بيقولك
 must call main constructor defined in class header.
 لو نفتكر بس حاجة كدة، كان في حاجة اسمها الـ Default Constructor
 ده الـ Constructor اللي بيـ run على طول لو إنت ما عملتش overwrite عليه. طيب تعمل overwrite عليه اللي هو إنت بتديله بقى هنا إيه الـ values يعني
 إنت بتقوله هنا إيه: أنا هغير الـ Constructor بتاعي..
بتاعي.. اللي هو إنت بتعمل def this. بدل في الـ Java كنت بتكتب إيه؟ function أو method يعني وبتسميها بنفس اسم الـ Student ده كنت بتكتب اسم إيه؟ Student. هنا لا، هنا إنت بتكتب this. this هو بيفهم إن this ده يعني الـ class ده هتغير الـ constructor بتاعه، هتـ.. هتخليه.. هتدي له values..
0 و string فاضي، فهو هياخد الـ val الـ ID هيخليه 0 والـ name هيخليه بـ class فاضي. طبعاً لو جيت تـ update هنا، إنت هنا مش هتعرف لأن إنت ده val برضه وده var. فتاخد بالك يعني إن لو إنت هتـ create الـ constructor، تاخد بالك من الحاجات ديت عشان إيه ممكن تكون إنت عامل حاجة val فما تقدرش تـ update عليها.
بيقولك في الـ.. هنا إنت بتسميها this وفي الـ Java إنت كنت لا.. بتسميها باسم نفس.. نفس اسم الـ class. بيقولك إن كلمة this بتستعمل إن إنت تـ call الـ base constructor، 
نفس الكلام اللي كنت بقوله يعني. الـ Fields؛ إيه هي الـ Fields أصلاً؟ الـ Fields دي اللي هي..
يعني الحاجات اللي زي كدة، اللي هي بيسموها إيه.. الـ variables عادي مثلاً اللي جوه إيه..
 جوه الـ class بتاعك. لو إنت عايز تـ create field عادي جوه الـ class بتاعك، فإنت بتعمله عادي نفس كأنك بتعمله في الـ main مثلاً؛ بتعمل variable عندك في الـ main، بتقول var واسم البتاع والـ data type، وبعد كدة إيه؟ بيساوي الـ value بتاعته، ولازم تعمله initialization طبعاً.
يعني موضوع عادي جداً، مافيش أي حاجة creative. هو نفس البتاع.. نفس الـ variable مثلاً إنت عايز تعمل له إيه.. تغيره بس جوه الـ constructor، فإنت بتقول this. 
.. this dot
فهو بياخد.. بيدخل على الـ class بـ access فيه الـ total marks. this كأنك بتقول كلمة Student في الـ Java فإنت لو قلت student dot حاجة في الـ Java بيجيبلك دي. في الـ Java برضه لو مكنتش غلطان هو بيشتغل عادي معاك يعني؛ لو إنت كتبت this dot كذا فهو بيشتغل معاك عادي، بس كلمة Student..
الـ Constructor نفسه مكنش ينفع إن إنت تعملها this لا، الـ Constructor نفسه كنت بتحط كلمة Student عادي. الـ Methods  الـ Methods عندك إيه.. دلوقتي هي function بس جوه الكلاس، حتى إحنا كنا قلناها في الـ section يعني إن في فرق ما بين أو قلنا إيه زي مقارنة سريعة كدة ما بين الـ Methods والـ Functions. فـ دي الـ Method الـ Method اللي هي function بتـ run جوه الكلاس.. أو يعني هي function معمولة جوه الكلاس. إنت طبعاً قلنا ممكن تـ access _ها عادي، تقول this dot اسم الـ function
this.sum_mark
أو تقول إيه اسم الـ Object بتاعك dot sum_marks عادي، 
لو إنت عملت Object من الـ class ده يعني. بيقولك
 declaring methods are similar to that of Java
 فإنت لو عايز تـ create.. نفس الموضوع اللي في Java يعني، لو إنت عايز تعمل methods
method كأنك بتعملها في.. نفس اللي إنت بتعمله في Java.
طيب .. بس كدة شكراً، هحاول أنزل الـ Lab دلوقتي في أسرع وقت عشان إيه الناس اللي عندهم Quiz قريب.