أهلا ومرحبا.
في هذه المحاضرة أريد أن أتحدث حول إعادة البيانات من الوظائف.
حتى هذه النقطة ، نحن نعرف ماذا الوظيفة هي أننا نعرف سبب فائدتها ، ونعرف كيفية
تحديد الوظائف نحن تعرف على كيفية تمرير البيانات إلى الوظائف.
الآن نريد أن نتحدث عن كيف نحن يمكن إرجاع البيانات من الوظائف
، وهو أمر مفيد جدًا أيضًا.
في مثالنا السابق ، عندما كنا ضرب رقمين ، عرضت دالة
الضرب نتائج الحساب في المحطة.
تذكر ، لقد حصلنا على ذلك بيان printf هناك.
أيضا ، كان لدينا مثال حيث نحن كانت مجرد وظيفة بسيطة في وقت سابق.
نحن فقط طبعنا البيانات داخل الوظيفة.
أردنا أن نكون لطيفين بدلاً من يجلبه إلى هناك
لأنه في الواقع يفعل أكثر من شيء واحد.
لقد طبعها بالفعل ، ملف تم إرجاع البيانات وطباعتها
في الوظيفة الرئيسية.
قد لا ترغب دائمًا في الحصول على ملف عرض نتائج الحسابات الخاصة بك.
تصبح الوظيفة أكثر مرن وأكثر عمومية مما يسمح بدوره
باستخدامه أكثر إذا كان يمكنك إرجاع البيانات.
لذلك يمكن للوظائف إرجاع البيانات باستخدام صيغة محددة في ج.
يجب أن نكون على دراية بهذا قليلا لأن تذكر
وظيفتنا الرئيسية في غاية في النهاية ، نعيد البيانات كثيرًا في
الكثير من الأمثلة.
لذا فقد تعرضنا لهذا قليلاً.
نحن فقط لم نقم بذلك حقًا فهم ما يعنيه ذلك.
دعنا نلقي نظرة أخرى على ملف الشكل العام للدالة.
تذكر ، رأس هذه الوظيفة.
كان لدينا نوع العودة الذي كان الكلمة التي تم تعريفها لأول مرة.
ثم حصلنا على الاسم ، ثم كان لدينا المعلمات مفصولة بفواصل
داخل الأقواس.
نحن نعرف بالفعل الاسم والمعلمات.
هذا أول شيء هو نوع الإرجاع.
يحدد نوع الإرجاع نوع بيانات القيمة التي تُرجعها
الدالة.
يمكن للوظائف إرجاع أي نوع من البيانات.
عليك فقط إخبار المترجم ما نوع البيانات التي ستعيدها إذا.
إنه عدد صحيح ، عدد عشري ، مضاعف مهما كان ، عليك تحديد ذلك
في رأس وظيفتك.
نوع الإرجاع.
نوع الإرجاع الذي رأيناه هنا ، ويمكنك تحديد هذا النوع من القيمة التي سيتم
إرجاعها بواسطة دالة طالما أنه من النوع القانوني في ج.
ذكرت أهمها ، مزدوج ، عائم وما إلى ذلك.
لكن يمكنك أيضًا العودة التعداد والمؤشرات.
لم نناقش المؤشرات ، لكن يجعله مرنًا جدًا جدًا عندما يمكنك
إرجاع المؤشرات.
يمكن لنوع الإرجاع أيضا تجنب النوع.
غالبًا ما ترى هذه الكلمة الأساسية باطلة.
نحن الآن نفهم ما تعنيه.
يعني الفراغ أنه لا توجد بيانات سوف تعاد.
إذا رأيت فراغًا قبل ملف اسم الوظيفة ، فأنت لا تقوم بإرجاع
أي بيانات.
إذا رأيت فراغًا داخل المعلمات القائمة ، فأنت لا تمرر أي بيانات.
الفراغ هو مجرد كلمة رئيسية عامة بالنسبة لأنواع الإرجاع والمعلمات ، ستلاحظ أيضًا أنه يمكنك استخدام
void كمؤشر أيضًا ، لكننا سنصل إلى ذلك عندما نصل
إلى ذلك.
لكن الفراغ هو وسيلة لقول لا شيء.
والسبب في تضمينها باطل بدلاً من عدم تضمين أي شيء
لأنه يجعل البرنامج أكثر قابلية للقراءة.
في الواقع عندما تقوم بتمرير البيانات إلى ملف وظيفة وليس لديك
أي بيانات يتم تمريرها ، يمكنك الحصول عليها تكون مجرد أقواس فارغة.
من السهل أن تقرأ إذا لديك فراغ هناك.
نفس الشيء مع نوع الإرجاع باستثناء ملف نوع العودة يجب أن يكون لديك الفراغ.
لا يمكنك أن تكون فارغة فقط.
يعني الفراغ عدم وجود بيانات سوف تعاد.
بيان العودة.
لقد تحدثنا عن كيف يمكنك ذلك تحديد البيانات التي سيتم إرجاعها ولكن كيف يتم ذلك
في الواقع تقوم بإرجاع البيانات.
داخل جسد الوظيفة ، أنت يجب أن يكون لديك بيان حيث يمكنك أن
تقول ما ستعود إليه.
لأن تذكر جسد أ يمكن أن تحتوي الوظيفة على الكثير من البيانات.
يمكن أن يكون لها متغيرات محلية ، يمكن لديك أي شيء تعرفه يمكن أن تقوم
الوظيفة بعملية حسابية محددة ، ربما تقوم بحسابات متعددة ، ماذا
تريد أن تعود.
لحسن الحظ هناك هذا البيان مع عودة الكلمة الرئيسية.
إذا قمت بتقديم الإرجاع مع عدم وجود اسم متغير بعد أو تعبير ،
فهذا يعني أنك مجرد الخروج من الوظيفة.
إنه مشابه لكسر في حلقة.
أنت عائد للتو من الوظيفة.
ويمكنك توفير هذا بتنسيق الوظائف التي تم تعريفها على أنها باطلة.
يوضح متى أنت تخرج من الوظيفة.
حقا يجب أن يكون لديك فقط العودة في مكان واحد في الجزء
السفلي من الوظيفة.
سنصل إلى ذلك لاحقًا ، لكنك لا يمكن أن يكون في أي مكان في وظيفة.
إذا كنت تراها في أي مكان في دالة ، فهذا يعني أنك تقفز
من هذه الوظيفة.
السبب في أنه من الجيد أن يكون لديك في الجزء السفلي يكون واضحًا جدًا
عند الخروج من الوظيفة.
إذا كان لديك عوائد متعددة حتى إذا كنت تقوم بإرجاع البيانات في
جميع أنحاء وظيفتك ، فهي يصعب قول ذلك عند عودتك.
لذلك ما أحب أن أفعله في بلدي الدوال هي إنشاء المتغيرات والعودة مرة
واحدة فقط في الأسفل.
إذا كنت بحاجة إلى إعادة شيء ما فيه دالة أو أعني في عبارة if محددة في دالة أو
شيء سوف أقوم بتعيين المتغير ثم إعادته
في الأسفل.
لذلك إذا كنت قد عدت وأنت ليس لديك أي شيء بعده ،
فهذا يعني فقط أنك تخرج من وظيفة مع عدم إرجاع البيانات.
هذا حقا لا يستخدم كثيرا.
أنت تستخدمه فقط في الفراغ دالة ، لا تُرجع قيمة.
الشكل الأكثر عمومية لـ تعيد عبارة الإرجاع بعض المتغيرات
أو بعض التعبيرات.
X زائد y أو إرجاع x.
هذا الشكل من بيان العودة لديه لاستخدامها مع نوع الإرجاع المحدد
في رأس الوظيفة.
إذا كنت تعيد int ، مهما كان هذا المتغير أو التعبير الذي تعيده
يجب أن يكون عدد صحيح.
يجب أن تقيم إلى عدد صحيح ، إذا كنت تعيد عدد صحيح.
الآن إذا كنت تقلب مزدوجًا ، يجب أن تتضاعف القيمة.
تذكر ، يمكنك الحصول على الكثير تم إرجاع أنواع مختلفة من البيانات.
القيمة التي يتم إرجاعها إلى برنامج الاستدعاء
هي القيمة التي تنتج عندما يكون ملف يتم تقييم التعبير بذلك.
إذا كان لديك x زائد y ، فسيتم إرجاعه نتيجة هذا التعبير ويجب أن يكون
من نفس نوع ملف إعلان الوظيفة كما ذكرت.
دالة لها بيانات في جسم الوظيفة ولكن
لا يُرجع قيمة ، يجب أن يكون لها الامتداد نوع العودة باطلة ، يجب أن.
لا يمكنك الحصول على ذلك.
إذا لم يكن لديك هذا وأنت عدم إرجاع
أي بيانات ، ستصلك رسالة خطأ.
عندما تقوم بتجميع البرنامج ويحتوي على دالة بنوع إرجاع
باطل يحاول ذلك إرجاع خطأ مترجم القيمة.
يعني الفراغ عدم إرجاع البيانات ، لا تفعل ذلك إرجاع متغير تعبير.
إذا كانت الوظيفة لا تحتوي على فراغ نوع
الإرجاع وله نوع إرجاع صالح ، ستحصل على ملف رسالة خطأ إذا
حاول المترجم إرجاع نوع مختلف عن محدد أو إذا عادوا للتو
مع عدم وجود أي شيء بعده.
لذا انتبه إلى هذا.
هذه الكلمات الرئيسية في بداية إعلان وظيفي مهم.
يؤثر بشكل مباشر على التنفيذ من الوظيفة والمترجم سوف يخبرك إذا كنت تفشل up ولا تقوم بإرجاع البيانات الصحيحة
أو إذا لم تقم بإرجاع أي منها البيانات أو إذا
قمت بإرجاع البيانات عندما لا يكون من المفترض أن تقوم بإرجاع
البيانات.
إذا كان التعبير ينتج عنه قيمة هذا نوع مختلف عن
نوع الإرجاع في الوظيفة header ، سيحاول c تحويله.
سيحاول المترجم لتحويله إذا كان ذلك ممكنًا.
لذلك على سبيل المثال إذا كنت ستعود عائم والتعبير الخاص بك هو أنا زائد س مع اثنين
من ints ، فسيتم لمجرد تحويله إلى عدد عشري.
إذا كنت ستعود int و لديك تعبير
يقوم بحساب تعويم ، إنه سوف يحولها إلى ذلك.
ستفقد البيانات في ذلك القضية ، لكنها ستفعل التحويل.
هذا ليس ممكنًا دائمًا للقيام بالتحويل.
في الحالات التي لا يكون فيها ذلك ممكنًا ، ستواجه خطأ
من قبل المترجم.
إذا كنت تحاول إرجاع عدد صحيح عندما يفترض
أن تعيد سلسلة أو عندما تحاول لإعادته عندما
يُفترض أن تعيد التعداد ، فهو ذاهب للشكوى المترجم.
يمكنك أيضًا الحصول على أكثر من واحد عودة بيان وظيفة
، أشرت إلى هذا باختصار و لماذا لا تريد أن تفعل ذلك.
ولكن يمكنك أن تفعل ذلك.
يمكن أن يكون لديك عوائد متعددة في جميع أنحاء الوظيفة.
إنه يجعل الشفرة أكثر صعوبة اتبع لأنك
تقفز من الوظيفة في كل مكان.
عندما تعود وأنت بالفعل قيم إرجاع متعددة
، فقط تأكد مرة أخرى إذا كان لديك وظيفة هذا
يعيد شيئًا ما ، لديك تعبير أو قيمة هذا النوع أو يمكن تحويله.
الآن بعد أن تحدثنا عنه تمرير البيانات وإرجاع البيانات
، فنحن نعرف كيفية استدعاء دالة ، لكني أريد أن أقول
شيئين آخرين عن الدعاء.
يمكنك استدعاء دالة بمجرد استخدام اسم الوظيفة متبوعًا بالوسيطات
التي تمررها بين القوسين ، نعرف ذلك ، إلى هذا الحد الذي نعرفه
ولكن أنا تريد ذكرها رسميًا ، فهذه هي الطريقة التي يمكنك من خلالها استدعاء
دالة.
عندما تستدعي الوظيفة ، فإن ملف قيم الوسيطات
التي تحددها بين الأقواس سيتم تعيين المعلمات داخل
الوظيفة.
المعلمات تمثيلية المتغيرات مع نوع البيانات.
يمكنك بعد ذلك استخدام هذا المتغير أي جانب في وظيفة الجسم.
عند خروج الوظيفة أو تنفيذها رمز معين ، سيستخدم تلك القيم المقدمة كوسيطات
، كما ذكرت.
الحجج التي تحددها عندما تقوم استدعاء دالة يجب أن توافق في
رقم النوع والتسلسل عندما المعلمات في رأس الوظيفة.
الأمر مهم أيضًا ، لم أفعل أكِّد على ذلك ، ولكن إذا كانت
عبارة int x double y ، فعليك أولاً أن تفعل ذلك تمرير في int ثم مزدوج.
لا يمكنك المرور في المضاعفة والكثافة.
الترتيب محدد للغاية.
لذا تأكد من تمرير البيانات كـ وسيطة عندما تستدعي
الوظيفة بنفس طريقة الوظيفة أعلن في رأس الوظيفة في قائمة المعلمات
، تمرير الأنواع الصحيحة هي ذلك أيضًا.
استدعاء وظيفة و عاد تعيين البيانات.
إذا كانت إحدى الوظائف تقوم بإرجاع البيانات ، فإن ملف يمكن للدالة تعيين تلك البيانات
فقط باستخدام عامل التشغيل equals وبعده العائد أيضًا أو يمكنك تخزينه في متغير محلي إذا
كنت تريد ذلك.
ستعمل أيضًا مع تعبير.
لذا يمكنك القول إرجاع x زائد y ، يمكنك القول إرجاع x ، يمكنك
القول إرجاع ثابت.
هذا المثال هنا من بعدك استدعاء المكالمة عندما تريد تعيين البيانات
التي تم إرجاعها.
لذا يمكنك القول أن int x يساوي my استدعاء الوظيفة ، أيًا كان ما ترجع إليه
هذه الوظيفة ، فسيتم تخصيصه لـ x.
وإذا عاد استدعاء وظيفتي x زائد y ، نتيجة x زائد y سيتم
إسنادها إلى x.
لذا يمكنك تخصيص البيانات التي عاد من استدعاء دالة
بمجرد وجود متغير في الجانب الأيسر من المعادلات واستدعاء
الوظيفة على الجانب الأيمن من التساوي.
لا تحتوي وظيفة الاستدعاء للتعرف على القيمة التي يتم إرجاعها
من دالة تسمى أو معالجتها.
لا تحتاج أن يكون لديك تلك المهمة هناك.
إذا كانت الوظيفة تقوم بإرجاع البيانات و لا تهتم بهذه البيانات ، ولا يتعين عليك الحصول
على المتكافئين على الإطلاق ، يمكنك فقط استدعاء الوظيفة.
لن يكون من المنطقي حقًا لأن إذا كانت تُعيد البيانات ، فهذا يعني
أنك ربما تحتاج إلى إلقاء نظرة عليها هذا ، لكن ليس عليك القيام به.
المترجم لن يشتكي إذا قمت باستدعاء وظيفة
فقط ولم تتعامل مع البيانات.
الأمر متروك لك كيف حالك تريد استخدام البيانات التي يتم إرجاعها
من استدعاءات الوظائف.
هذا مثال على الاستدعاء دالة وكذلك إرجاع البيانات
من دالة.
في هذا المثال ، اضرب رقمين.
كان هذا فقط مثل المثال نحن سابقًا ، لكن المثال السابق
لم يُرجع أي بيانات.
عرض المثال السابق الإخراج.
في هذا المثال ، نحن لا يتم عرض أي إخراج.
نحن نعيد البيانات و ثم نعرض الإخراج في
الوظيفة الرئيسية.
هنا اضرب عددين يأخذ عددين صحيحين كمعلمات.
نضرب هذين العددين الصحيحين.
ثم بدلاً من طباعة هذا المبلغ أو القيمة ، نستخدم الكلمة الرئيسية
للعودة وبعد ذلك تحديد متغير اسمه نتيجة ثم لدينا الفاصلة
المنقوطة لإنهائه.
عندما ترى أن الكلمة العودة داخل جسم الوظيفة ، فأنت تعيد
تلك البيانات.
وتذكر ، يمكنك ذلك هذه الأماكن المتعددة.
ولكن يمكنك فقط إرجاعها مرة واحدة القيمة ، لا يمكنك إرجاع قيم متعددة.
لذلك إذا كان لديك الكلمة الرئيسية للإرجاع بتنسيق أماكن متعددة
، يجب أن تكون داخل عبارة if أو حلقة لأن أنت تقفز حقًا.
إذا كان لديك عودة تليها عودة أخرى ، سوف يعطيك
خطأ لأنه سيقول لك عائد اثنين في كلتا الحالتين.
أنت تعود دائمًا إلى النتائج ، لا يمكنك فعل ذلك.
لكن عودة الكلمة الرئيسية مهمة.
أنت تعيد متغيرًا.
ثم ترى بشكل رئيسي وظيفة يتم تعيين البيانات التي يتم إرجاعها
إليها متغير محلي آخر يسمى النتيجة.
ستلاحظ أننا نستخدم نفس الأسماء هنا.
هذا له علاقة بالوظيفة النطاق الذي سنتحدث عنه في المحاضرة
القادمة ، محلي المتغيرات مقابل المتغيرات العالمية.
كل ما تحتاج إلى الاهتمام به في هذه المحاضرة حقيقة أن
هذه الوظيفة تضاعفت رقمين يعيد البيانات.
كيف تعيده ، تعيده باستخدام الكلمة الأساسية return
متبوعة بمتغير التعبير.
ستلاحظ أيضًا أن عملية الضرب رقمين يحددان نوع الإرجاع
في أعلى رأس الوظيفة.
انها ترجع كثافة العمليات.
لذلك علينا إعادة عدد صحيح.
تلاحظ أيضًا أنه عندما نقوم بالتنازل البيانات الموجودة في
الوظيفة الرئيسية ، نقوم بتعيينها لها في int.
من السهل جدا تعيين هؤلاء نحن فقط لديك عامل التشغيل يساوي.
إذا لم نهتم بالبيانات ، فنحن يمكن فقط استدعاء
ضرب رقمين ثم لا يفعل شيئًا به سوى.
بعد أن نحصل على البيانات المرتجعة من الوظيفة ، ثم نطبعها
باستخدام وظيفة printf.
هذا يجعل الوظيفة أكثر متماسكة في أنه يأخذ البيانات.
نحن لا نعرض في الواقع النتائج داخل الوظيفة.
هناك أوقات لا نريد فيها لعرض النتائج
، نريد فقط ضرب عددين ثم قد نرغب في تقسيم المنتج.
المرونة في تمرير البيانات والبيانات التي يتم إرجاعها هي مشكلة كبيرة.
هذا مثال بسيط.
سوف تتعرض ل هذا أكثر في التحدي القادم لدينا.