أهلا ومرحبا.
نحن نبدأ قسم جديد.
يعتمد قسمنا على الوظائف.
لذلك سوف نتحدث عن البعض من أساسيات الوظائف أولاً.
الوظيفة هي وظيفة قائمة بذاتها وحدة رمز البرنامج
المصممة لإنجاز مهمة معينة ، هذا تعريف عالي المستوى.
ستكون الوظيفة في الأساس شيء يمكنك استدعاؤه يساعدك في
تقليل تكرار التعليمات البرمجية.
لكن ما يفعله هو قائمة بذاتها داخل
الشفرة نفسها ، وتحتوي على بعض المهام فقط التي ستنجزها.
قواعد النحو سوف تحديد هيكل الوظيفة
وكيف يمكن استخدامها.
ذلك اعتمادا على ما البرمجة اللغة التي تستخدمها ، قد يتم
تعريف الوظائف بشكل مختلف.
بالنسبة لـ c ، سوف نتحدث حول قواعد محددة لـ ج.
تدعم معظم لغات البرمجة هذا مفهوم الوظيفة ، وسأخبرك بالمزايا
ولماذا يتم دعمهم.
الوظيفة في c هي نفسها الإجراءات الفرعية أو الإجراءات بلغات
البرمجة الأخرى.
لذلك في كثير من الأحيان تسمع هذه الإجراءات والروتينات الفرعية ،
نفس الشيء مثل الوظيفة.
وحدة قائمة بذاتها يتم تنفيذها بعض التعليمات البرمجية التي يمكنك الاتصال بها.
تتسبب بعض الوظائف في وجود ملف العمل الذي يتعين القيام به.
لذلك نحن على دراية بزوجين وظائف حتى هذه النقطة.
لقد درسنا printf الوظيفة التي تعرض الإخراج على
شاشتك التي تستغرق وقتًا العمل ، يفعل شيئا من أجلك.
ثم النتيجة التي نظرنا إليها أيضًا في وظيفة scanf التي تأخذ
المدخلات من لوحة المفاتيح.
مرة أخرى ، يقوم نوعًا ما بعمل آخر.
على الرغم من وظائف أخرى في الواقع ، يمكن فقط العثور
على قيمة لاستخدام البرنامج.
لذلك على سبيل المثال عندما ندرس السلاسل ومصفوفات الأحرف ، سننظر
في وظائف السلسلة التلاعب وتغيير الأشياء.
هناك وظيفة على وجه الخصوص يسمى طول الضجة وهذا سيخبر
مبرمج كيف طويلة سلسلة معينة.
لا يقوم بعمل ما فقط يعيد المعلومات إليك.
لذلك سوف تؤدي الوظائف بناءً على المهمة التي تحتاج إلى
إنجازها في البرنامج ، إما أنه
سيتسبب في إجراء أو أنه سيقوم بتعديل ملف قيمة البرنامج أو إرجاع قيمة أو إخبارك ببعض معلومات الحالة.
مزايا الوظائف.
سنستخدم الوظائف لأن لديها الكثير من المزايا.
وظائف تسمح لـ استراتيجية فرق تسد.
لذلك إذا كنت ستكتب و اذهب واكتب برنامجًا متوسط الحجم
أو برنامجًا كبيرًا ، فسيكون يصعب صيانته حقًا.
سيكون من الصعب اختباره ، تصحيح الأخطاء والعثور عليها وإصلاحها إذا كان لديك
وظيفة واحدة كبيرة.
لذا الانهيار والقيام بذلك استراتيجية قهر تقسيم ستجعل الأمر
أسهل بكثير البحث عن الأخطاء وإصلاحها في التعليمات البرمجية الخاصة بك.
وهل يمكنك تخيل برنامج سي واحد أن كل ما كان لدي هو الوظيفة الرئيسية
وكان هناك 5000 سطر فيها.
لن يكون لدينا أدنى فكرة عن كيفية القيام بذلك لمهاجمة هذه المشكلة.
إنه تنظيم ضعيف حقًا.
ليس لديك أي تماسك و أنت مجرد نوع من الغوص هناك لمحاولة
حل مشكلة.
لذلك سنستخدم الدوال.
فرق تسد تعني في الأساس يمكن تقسيم المهام إلى عدة مهام
فرعية مستقلة.
يقلل من الإجمالي تعقيد الكود.
يمكنك إنشاء وظائف منفصلة لكل مهمة فرعية ، وبعد ذلك يمكنك إنشاء المزيد
من الوظائف لتقسيمها المهمة الفرعية إلى مهام فرعية أصغر.
في كل مرة تقوم فيها بإنشاء هذه وظائف ، فإنه يقلل من التعقيد.
يجب أن يكون هدفك عندما تكون أنت خلق هذه الوظائف
واستخدام فرق تسد تتمثل الإستراتيجية في جعل وظائفك
متماسكة قدر الإمكان.
وما يعنيه ذلك هو التأكد كل وظيفة تقوم بمهمة واحدة فقط ، وليس لديها وظيفة
تفعل 5 مهام مختلفة أو 10 مهام مختلفة.
إذا قمت بكتابة وظيفة تقرأ الإدخال من لوحة المفاتيح ، اجعلها
تقرأ الإدخال من لوحة المفاتيح ، لا تفعل ذلك اجعله يتحقق من سلسلة أو يعرض الإخراج
أو أي شيء من هذا القبيل.
يجب أن تكون الوظائف صغيرة ، و يجب أن يكونوا متماسكين للغاية.
لكن فرق تسد الإستراتيجية رائعة حقًا لأنها
تقلل من هذا التعقيد.
بدلا من أن يكون لها وظيفة رئيسية مع 5000 سطر من التعليمات البرمجية ، يمكن
أن يكون لديك العديد والعديد من الوظائف التي تقوم بمهام محددة ويمكنك
التعرف عليها بسرعة كبيرة.
حتى الوظائف ذاهب إلى تقليل ازدواجية التعليمات البرمجية.
وعندما تقلل من الازدواجية من الكود ، سيوفر لك الوقت
عند الكتابة والاختبار وتصحيح هذا الرمز.
كما سيتم إعادة تقليلها حجم شفرة المصدر.
ولماذا تقلل الوظائف تكرار الكود لأنه إذا كان لديك
مهمة بدلاً من القيام بذلك المهمة مرارًا وتكرارًا وكتابة
نفس الرمز مرارًا وتكرارًا ومرة أخرى ، تقوم بتضمين هذه المهمة
في وظيفة وأنت فقط قم باستدعاء الوظيفة ، وستقوم الوظيفة بذلك نيابة
عنك في كل مرة ليس لديك أي ازدواجية هناك.
إذا كان عليك القيام بمهمة معينة عدة مرات
في أحد البرامج ، ما عليك سوى كتابة ملف تعمل مرة واحدة
، تمامًا كما ذكرت. أنت لست بحاجة إلى اكتب هذا الرمز عدة مرات.
لذلك يمكن للبرنامج استخدام ملفات هذه الوظيفة كلما دعت الحاجة.
ويمكنك أيضًا استخدام نفس الشيء تعمل في برامج مختلفة
، وهذا ما يشكل مكتبة.
كنا نفعل ذلك ، كنا نستخدم وظيفة printf
، وهي من ملف مكتبة إخراج المدخلات القياسية.
وهذا مكتوب مرة واحدة فقط ، و نستدعيه مرارًا وتكرارًا.
إذا لم تكن هذه الوظيفة موجودة ، فسنقوم بذلك يجب
أن تأخذ تنفيذ هذه الوظيفة ووضعها في منطقتنا البرنامج واستمر في تكراره.
لذلك يمكن للوظائف أن توفر الكثير من الوقت ويمكن
أن تقلل من شفرة المصدر الخاصة بك ويمكنك ذلك إعادة استخدامها مرارًا وتكرارًا.
لذلك فهو أيضًا برنامج تقنية إعادة الاستخدام.
كما أنه يساعد في سهولة القراءة.
عندما تعدل البرنامج الخاص بك وهو ما تفعله عند
إنشاء هذه الوظائف المنفصلة لـ أداء مهام محددة ، يصبح البرنامج
منظمًا بشكل أفضل.
كما ذكرت ، إذا كان لديك رئيسي روتين ، وظيفة رئيسية وفيها الكثير
من الأكواد ، إنها ستفعل يكون اتباعها أصعب بكثير من اتباع
روتين أساسي يستدعي 5 وظائف و هذه الوظائف تقوم بمهام محددة.
لذلك فهي تساعد في تنظيم البرنامج.
يساعد في صيانة البرنامج.
إنها أسهل بكثير للقراءة وأسهل لتغيير أو إصلاح أي كود مصدر.
وتذكر ، الصيانة المرحلة هي أغلى مرحلة في دورة حياة
البرنامج ، هذه هو المكان الذي تصلح فيه الأخطاء
، تم إصدار البرنامج و حيث تضيف ميزات جديدة.
كان تنظيم ملفات البرنامج ، سيكون
من الأسهل صيانته.
إذن هذه المنظمة ، هذه سهولة القراءة ، هذه القدرة على
متابعة ما يجري فيه شفرة المصدر مهمة للغاية والوظائف
تساعد كثيرًا.
نهج فرق تسد يسمح أيضًا بتطوير واختبار
أجزاء من البرنامج وتصحيحه بشكل مستقل.
عندما تخرج هناك في الواقع العالم وتبدأ
العمل على الكود ، ستلاحظ ذلك البرامج كبيرة جدًا حقًا.
وهناك الكثير من الناس يعملون على هذه البرامج
، مئات وربما الآلاف.
عندما يكون لديك كل هؤلاء الناس يعملون في أحد البرامج ، يكون من الأسهل بكثير
العمل على هذا البرنامج إذا كنت تفعل ذلك افعل هذا النهج قهر القسمة إذا
كان لديك مهام صغيرة الناس يفعلون وهو مستقل.
أنت لا تلمس نفس الشيء شفرة المصدر ويمكنك المضي قدمًا
وتنفيذ المهام بشكل أسهل.
وعندما تفعل هذا ويكون لديك عدة أشخاص يعملون في مشروع ، يمكن
أن يقلل من التنمية الشاملة الوقت الذي يقلل مرة أخرى من تكاليف
الصيانة ، ويقلل من تكاليف التطوير.
يمكن أيضًا إعادة استخدام الوظائف مما سيقلل الوقت مرة أخرى.
ومرة أخرى نفعل ذلك مع وظيفة printf ، إعادة استخدامها.
لكنك عندما تكتب المستخدم الخاص بك وظائف محددة ، يمكنك إعادة استخدامها
مرات ومرات في البرنامج.
لذا فإن إعادة استخدام البرامج أمر كبير ، ميزة كبيرة للوظائف.
عندما تفكر حول هذه الوظائف.
الشيء الجميل الآخر في التصميم برنامجك على الوظائف هو أنك تريد أن تفكر
فيه على أنه صندوق أسود.
ماذا يعني عندما كنت فكر في الأمر على أنه صندوق أسود ، كل ما
تفكر فيه هو المدخلات إلى الوظيفة والإخراج.
وعندما تركز فقط على الإدخال في الإخراج ، فإنه يسمح لك بالنظر
إلى التصميم ككل قبل أن تبدأ في التنفيذ.
وهكذا تعمل الوظائف بشكل عام تجعلك في هذا النوع من التفكير حيث يمكنك
التركيز على التصميم.
وقد ذكرت أن التصميم مهم.
التصميم هو عندما تبدأ التخطيط خارج برنامجك
، كيف ستنظمه ، كيف ستكتب الرمز.
ومن المهم القيام بهذا التخطيط قبل أن تبدأ في التنفيذ وهو
كتابة الكود.
وعن طريق التفكير في الوظائف والتفكير في المدخلات والمخرجات
فقط ، يمكنك التفكير في كيفية عمل سيتم تنظيم البرنامج والوظائف التي تحتاج
إلى إنشائها.
لذلك لا داعي للقلق مجرد تنفيذ في التفاصيل.
وهذا مهم لأن أول شيء تريد القيام به قبل كتابة التعليمات
البرمجية هو مجرد التفكير حول التصميم ، فأنت لا تريد البدء في التفكير في
التنفيذ.
الكثير من القضايا التي الطلاب عندما يكتبون التعليمات البرمجية
لأول مرة هم فقط ابدأ التنفيذ.
إنهم لا يفكرون حتى في المشكلة ، فهم لا يفكرون في كيفية
حل المشكلة ، بدأوا للتو في كتابة التعليمات البرمجية.
أبدا نهج جيد.
عندما تفكر في الكتابة الكود والوظائف ، فكر
في الأمر على أنه مجرد مدخلات ومخرجات من الوظيفة وستساعدك
في تصميمك.
لذلك دعونا نلقي نظرة على بعض الأمثلة.
لقد استخدمنا وظائف مدمجة مثل مثل printf و scanf ، كما ذكرت.
هؤلاء هم في المعيار مكتبة المدخلات والمخرجات التي
تقدمها لغة البرمجة c.
لذلك نحن معتادون إلى حد ما على ما الوظيفة هي لأننا استخدمناها ، لكننا
لم نمر بالغرامة تفاصيل محببة عن كيفية تعريفك لوظيفة
ما أو كيفية نجاحك بالفعل البيانات إلى وظيفة ، لا شيء من هذا القبيل.
ولكن مع وظيفة printf ، يجب أن تكون قد لاحظت
أنه يأخذ البيانات.
يمكنك تمرير البيانات إلى الوظيفة.
البيانات هي الحجج بين الأقواس التي تلي
اسم الوظيفة.
سيكون لدينا كل محاضرة أخرى عن الحجج
والمعايير لشرحها أكثر.
لكن على مستوى عالٍ نفهم ذلك يمكنك تمرير البيانات إلى وظيفة.
وافهم ذلك من خلال النظر في وظيفة printf.
الحجة الأولى للطباعة الوظيفة وهي البيانات التي
نمررها إليها كانت عبارة عن سلسلة حرفيًا ، كان كل تلك الأحرف داخل
علامات الاقتباس المزدوجة.
ومن ثم كان لدينا أيضا الحجج التي يمكن أن يكون هناك 0 أو العديد من الحجج المتغيرة
، والتي كانت سلسلة من المتغيرات أو التعبيرات التي سيتم
عرض قيمها.
لذا تذكر ، إذا كان لدينا أي تنسيق المحددات في الوسيطة الأولى
سيكون لدينا بعد ذلك المتغيرات في هذا في الحجج اللاحقة.
فهل كنت قادرا على المرور البيانات إلى وظيفة printf.
أنت أيضا يجب أن تكون قد لاحظت كيف أنت يمكن أن تتلقى المعلومات مرة أخرى
من وظيفة ، يمكن إرجاع البيانات إليك.
في وظيفة scanf ، واحد من الحجج كانت كيف كنت ستخزن
البيانات.
وهكذا يمكنك تمريرها أ متغير وسيكون لهذا المتغير قيمة مهما
كانت المستخدم يكتب في لوحة المفاتيح.
لذلك يمكن التفكير في ذلك نوعًا ما كقيمة إرجاع في دالة.
لذا فإن الوظائف ذات قيمة كبيرة لأن يمكنهم أخذ البيانات إليها ومن ثم يمكنهم
إعادة البيانات منها.
إذن مثال على الترميز للدالة وستكون هذه مجرد دالة سنستدعيها
، لكن هذه هي الوظيفة الرئيسية.
نحن على دراية بـ الوظائف الرئيسية ، نقطة
دخول البرنامج.
لكن انظر إلى مدى جمال هذا.
نحن ندعو الوظائف قراءة قائمة فرز ومتوسط.
لدينا 3 أسطر فقط من التعليمات البرمجية.
علينا أن نذهب وننفذ تلك وظائف ، لكنها تجعل البرنامج أكثر تنظيماً
لأننا على الفور تعرف ما يفعله هذا البرنامج.
هذا البرنامج سوف يقرأ قائمة ، ثم تقوم بفرز
قائمة ، ثم تقوم بفرزها عرض متوسط القائمة ، وتحتوي القائمة
على عدد عائم.
لذلك فهو سهل القراءة للغاية لتكون سهلة الصيانة.
إذا كان لدينا أي أخطاء في ملف البرنامج ، سنعرف على الفور كيفية
العثور على هذا الخطأ أو عزله.
إذا كان الخطأ لا يقوم بالفرز ، فنحن يمكن أن تذهب إلى وظيفة الفرز.
إذا كان الخطأ في المتوسط ، يمكننا الذهاب إلى الوظيفة المتوسطة
، من السهل جدًا عزل الأخطاء.
لذلك عندما نطبق هؤلاء الوظائف في الشريحة السابقة
، كنا نسميها فقط.
لتنفيذ الوظائف بالفعل ، عليك كتابة الكود داخل
جسم الوظيفة.
يمكنك إما استخدام الوظائف التي يتم تنفيذها بواسطة لغة c مثل printf
أو يمكنك إنشاء ملفات وظائف محددة من قبل المستخدم الخاص بك.
ليس عليك تنفيذ ملف وظائف printf أو أي من الوظائف الموجودة
في المكتبة ، أنت فقط تنفيذ الوظائف الخاصة بك.
حتى في هذا المثال السابق مع فرز قائمة القراءة والمتوسط ، يجب
أن نذهب وسنقوم بذلك يجب أن تنفذ هذه الوظيفة.
علينا توفير وظيفة header ، وهو جسم وظيفي يقوم
بالفعل بقراءة القائمة وفرز القائمة
وحساب متوسط القائمة.
لم ننتهي فقط بالتعريف وظائف ، علينا تنفيذها.
وعندما تقوم بتنفيذ ملف وظائف ، فأنت
تريد دائمًا استخدام أسماء وظائف وصفية لتوضيح ما يفعله البرنامج
وكيفية تنظيمه.
في المثال السابق ، كان لدينا ملف الوظيفة المسماة قائمة القراءة ، واضحة جدًا
ما تفعله ، نوع الوظيفة الاسم.
لم نقم بتسمية الدالة x y أو z.
وصفنا هذه الوظيفة.
إنه نفس الشيء عندما أنت تصف أو تنشئ
متغيرات وأسماء ذات مغزى.
وأيضًا إذا قمت بإجراء هذه الوظائف حيث تكون عامة بما فيه الكفاية
حيث يفعلون شيئًا بالفعل وهم يأخذون بيانات عامة ، ستكون قادرًا في الواقع
على ذلك إعادة استخدامها في برامج أخرى ، تمامًا مثل
وظيفة المكتبة.
مرة أخرى ، دعم إعادة استخدام البرامج.
لذا في هذه المحاضرات القادمة ، سنتحدث عن كيفية تحديد
وظيفة ، و بناء جملة محدد ، كيف يمكننا استدعاء واستدعاء دالة
وكيف يمكننا ذلك تمرير البيانات وإرجاعها منها.
هذا ما سنركز عليه في المحاضرات القادمة.
أنا أيضا أردت أن أذكر ذلك روتيننا الأساسي الذي
نراه مرارًا وتكرارًا في كل مرة برنامج c ، هذه وظيفة.
الوظيفة الرئيسية خاصة المعترف بها في نظام c ، فإنه
يشير إلى مكان البرنامج هو أن يبدأ التنفيذ.
تحتوي جميع برامج c دائمًا على رئيسي.
يمكن أن تأخذ الوظيفة الرئيسية البيانات عند تمريرها إليها
، وسيطات سطر الأوامر أو ذلك ليس من الضروري أخذ البيانات.
كما أن لديها اختيارية البيانات التي يمكنه إرجاعها.
ستلاحظ أننا نستخدم ملفات الوظائف الرئيسية التي تعيد 0.
عادة ، يتم استخدام ذلك عند تريد إرجاع رموز الخطأ.
لكننا استخدمنا وظائف محددة بالفعل وأهم وظيفة
هي تلك الوظيفة الرئيسية و يساعد ذلك مرة أخرى في تنظيم الكود.
نحن نعلم دائمًا أين البرنامج يبدأ لأنه علينا فقط
العثور على الملف الرئيسي.
هذا وصف عالي المستوى نوع الوظائف من تحديد مزايا الوظائف
وما هي الوظيفة بالضبط.
الآن نريد التحدث حول التنفيذ.
شكرًا لك.