سيطلب منك مسار Julia بأكمله أن تتعامل مع حلّك كأنه مكتبات صغيرة، أي أنك ستحتاج إلى تعريف دوال وأنواع وغيرها، ثم تُشغَّل هذه مقابل مجموعة اختبارات. لهذا السبب، سنقدّم الدوال المُسمّاة كأول مفهوم على الإطلاق.
Julia لغة برمجة ديناميكية قوية الأنواع. أسلوب البرمجة فيها وظيفي في الأساس، وإن كان أكثر مرونة ممّا هو عليه في لغات مثل Haskell.
لا حاجة للإعلان عن متغير مسبقًا. يكفي أن تُسند قيمة إلى اسم مناسب:
julia> myvar = 42 # an integer
42
julia> name = "Maria" # strings are surrounded by double-quotes ""
"Maria"
إذا احتجت أن تكون قيمة متاحة في كل البرنامج، لكن لا يُتوقّع أن تتغيّر، فمن الأفضل تعليمها كثابت.
بدء الإسناد بالكلمة المفتاحية const يسمح للمترجم بتوليد كود أكثر كفاءة ممّا هو ممكن للمتغير.
تساعدك الثوابت أيضًا على الحماية من الأخطاء البرمجية.
محاولة تغيير قيمة const عن غير قصد ستُصدر تحذيرًا:
julia> const answer = 42
42
julia> answer = 24
WARNING: redefinition of constant Main.answer. This may fail, cause incorrect answers, or produce other errors.
24
لاحظ أنه لا يمكن تعريف const إلا خارج أي دالة.
سيكون هذا عادةً قرب أعلى ملف *.jl، قبل تعريفات الدوال.
هذه هي نفسها في لغات أخرى كثيرة:
2 + 3 # 5 (addition)
2 - 3 # -1 (subtraction)
2 * 3 # 6 (multiplication)
8 / 2 # 4.0 (division with floating-point result)
8 % 3 # 2 (remainder)
هناك طريقتان شائعتان لتعريف دالة مُسمّاة في Julia:
باستخدام الكلمة المفتاحية function
function muladd(x, y, z)
x * y + z
end
الإزاحة بأربع مسافات عُرف متّبع لتحسين القراءة، لكن المترجم يتجاهلها.
الكلمة المفتاحية end ضرورية.
لاحظ أنه كان بإمكاننا كتابة return x * y + z.
لكن دوال Julia تُرجع دائمًا آخر تعبير يُقيَّم، لذا فإن الكلمة المفتاحية return اختيارية.
يفضّل كثير من المبرمجين تضمينها لجعل نواياهم أكثر وضوحًا.
باستخدام "صيغة الإسناد"
muladd(x, y, z) = x * y + z
تُستخدم هذه في الغالب لصنع دوال موجزة ذات تعبير واحد.
لا تُستخدم الكلمة المفتاحية return أبدًا في صيغة الإسناد.
الصيغتان متكافئتان، وتُستخدمان بالطريقة نفسها تمامًا، فاختر أيّهما أكثر قابلية للقراءة.
استدعاء دالة يتم بتحديد اسمها وتمرير وسائط لكل معامل من معاملات الدالة:
# invoking a function
muladd(10, 5, 1)
# and of course you can invoke a function within the body of another function:
square_plus_one(x) = muladd(x, x, 1)
مثل لغات كثيرة، تشترط Julia أن تبدأ الأسماء (أسماء المتغيرات والدوال وأشياء أخرى كثيرة) بحرف، يتبعه أي مزيج من الحروف والأرقام والشرطات السفلية.
بحسب الاصطلاح، تُكتب أسماء المتغيرات والثوابت والدوال بأحرف صغيرة، مع إبقاء الشرطات السفلية عند حد أدنى معقول.
في هذا التمرين ستكتب بعض الكود لمساعدتك على طهي لازانيا رائعة من كتاب الطبخ المفضل لديك.
أمامك أربع مهام، وكلها تتعلق بالوقت المستغرق في طهي اللازانيا.
عرّف الثابت expected_bake_time الذي يُرجع عدد الدقائق التي يجب أن تُخبز فيها اللازانيا في الفرن.
وفقًا لكتاب الطبخ، يجب أن تبقى اللازانيا في الفرن مدة 60 دقيقة إجمالًا.
julia> expected_bake_time
60
عرّف الدالة preparation_time التي تأخذ عدد الطبقات التي أضفتها إلى اللازانيا كوسيط، وتُرجع عدد الدقائق التي استغرقتها في تحضير اللازانيا، بافتراض أن إعداد كل طبقة يستغرق منك 2 دقيقتين.
julia> preparation_time(4)
8
عرّف الدالة remaining_time التي تأخذ عدد الدقائق الفعلية التي قضتها اللازانيا في الفرن كمعامل، وتُرجع عدد الدقائق التي لا تزال اللازانيا بحاجة إلى قضائها في الفرن.
julia> remaining_time(50)
10
عرّف الدالة total_working_time التي تأخذ وسيطين: الوسيط الأول هو عدد الطبقات التي أضفتها إلى اللازانيا، والوسيط الثاني هو عدد الدقائق التي قضتها اللازانيا في الفرن.
ينبغي أن تُرجع الدالة إجمالي عدد الدقائق التي أمضيتها في العمل على طهي اللازانيا، وهو مجموع وقت التحضير بالدقائق، والوقت بالدقائق الذي قضته اللازانيا في الفرن حتى تلك اللحظة.
julia> total_working_time(3, 20)
26
سجّل في Exercism لتتعلّم وتتقن Julia عبر 35 مفهومًا128 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.