جاري التحميل...

نطاق الأسماء

اكتب دالة باسم mark بمعامل واحد: static void mark(int n). داخل الأقواس المعقوفة اكتب ذلك المعامل بـ Console.WriteLine(n);. من Main استدعِ mark(4);. يجب أن تُظهر الشاشة سطرًا واحدًا: 4. الاسم n يوجد فقط داخل mark. إن حاولت كتابة n من Main، يرفض البناء. ذلك الحد — أي الأسماء ترى الدالة — هو ما تعلّمه هذه الصفحة. أبقِ اسم الصنف العام Pine.

أسماء تبقى داخل الدالة

في صفحة التحميل الزائد، عدة دوال paint شاركت اسمًا لكنها أبقت قوائم معاملات منفصلة. هنا التركيز أصغر: دالة واحدة، اسم معامل واحد، وأين يُسمح لذلك الاسم أن يظهر. المعامل اسم يخص الدالة التي تعلنه. خارج أقواس تلك الدالة المعقوفة، الاسم يختفي.
افتح ملف Pine. اسم الصنف يبقى Pine. هذه الصفحة لا تعيد تسمية النوع. احذف أي عرض paint متبقٍ إن كان ذلك كل ما لديك في Main. احذف أي بقايا twice. احذف أي سطر ReadLine. الملف الذي تحتفظ به لا ينتظر الكتابة.
خارج Main، وما زلت داخل أقواس الصنف المعقوفة، اكتب static void mark(int n). الجسم فيه سطر كتابة واحد: Console.WriteLine(n);. أبقِ void في هذه الصفحة. أنت تراقب الرؤية، لا قيم العودة. احفظ الملف قبل التشغيل. البرنامج الكامل الأول في الصندوق التالي.

الملف الذي تحتفظ به

هذه النسخة التي تشغّلها أولًا. Main يحمل الاستدعاء. mark يحمل سطر الكتابة الذي يستخدم n.

mark writes its parameter

csharp
using System;

public class Pine
{
    public static void Main()
    {
        mark(4);
    }

    static void mark(int n)
    {
        Console.WriteLine(n);
    }
}

اقرأ من الأعلى. using System; يجهّز أسماء قصيرة. public class Pine يسمّي النوع. public static void Main() حيث يبدأ وقت التشغيل. الاستدعاء mark(4) يرسل 4 إلى المعامل n. داخل mark، يكتب Console.WriteLine(n) القيمة 4. عندما تنتهي mark، ينتهي الاسم n أيضًا. Main لم يحمل قط اسمًا n. الرقم 4 عبر الاستدعاء كقيمة. الاسم n لم ينتقل إلى Main. سطر واحد على الشاشة: 4.

شغّله بـ dotnet run. البرنامج يكتب سطرًا واحدًا ويتوقف. لا ينتظر منك الكتابة. إن انتظر dotnet run، فما زال ReadLine في الملف. احذف ذلك السطر وأبقِ mark(4); مع دالة mark أعلاه. الشاشة تعرض 4. إن عرضت الشاشة ok، فما زال استدعاء paint("ok") متبقيًا يعمل. إن عرضت الشاشة الحرف n، فسطر الكتابة فيه علامات اقتباس: Console.WriteLine("n");. لا تعيد تثبيت .NET SDK من أجل شاشة تعرض السطر الخطأ.

امشِ تشغيلًا كاملًا بالترتيب. C# يبدأ عند Main. الاستدعاء mark(4) يرسل 4 إلى المعامل n. داخل mark، يكتب WriteLine(n) القيمة 4. عندما تنتهي mark، ينتهي الاسم n أيضًا. Main لم يحمل قط اسمًا n. الرقم 4 عبر الاستدعاء كقيمة. الاسم n لم ينتقل إلى Main.
إن أضفت Console.WriteLine(n); داخل Main بعد الاستدعاء، يبلغ البناء أنه لا يجد الاسم n. ذلك الخطأ هو الدرس يعمل: n لم يُعلن قط في Main. أصلِح بحذف ذلك السطر من Main، أو بإعلان اسم مختلف في Main إن احتجت محليًا هناك. لا تتوقع أن يظهر معامل mark في Main من تلقاء نفسه.

اسم محلي بجانب المعامل

داخل mark يمكنك أيضًا إعلان اسم جديد ليس معاملًا. ذلك الاسم المحلي يعيش فقط بين أقواس mark المعقوفة. أمل شائع للمبتدئ أن اسمًا أُعلن في Main يظهر تلقائيًا داخل كل دالة في الصنف. ليس كذلك في هذا الشكل. إن كان في Main السطر int room = 4; وحاولت mark كتابة room دون استقباله، لا يجد البناء room داخل mark. الإصلاح هو تمرير القيمة: mark(room); مع بقاء إعلان mark كـ mark(int n).

مرّر محليًا من Main إلى mark

أعلن int room = 4; داخل Main. استدعِ mark(room);. داخل mark أبقِ كتابة n. الشاشة ما زالت تعرض 4. الاسم المحلي في Main هو room. اسم المعامل في mark هو n. هما اسمان مختلفان في مكانين مختلفين. القيمة 4 هي ما يسافر.

pass room into mark

csharp
using System;

public class Pine
{
    public static void Main()
    {
        int room = 4;
        mark(room);
    }

    static void mark(int n)
    {
        Console.WriteLine(n);
    }
}

هذا الملف الثاني. يعلّم الرؤية نفسها مع محلي في Main. شغّل dotnet run. ما زلت ترى سطرًا واحدًا: 4. إن غيّرت room إلى 9 وتركت جسم الدالة كما هو، تعرض الشاشة 9. الدالة ما زالت تكتب أي قيمة وصلت في n. يستطيع Main كتابة room أيضًا إن أضفت Console.WriteLine(room); في Main — ذلك الاسم يخص هناك. Main ما زال لا يستطيع كتابة n. بعد أن ترى شكل room، أعد الملف المحفوظ باستدعاء واحد إن أردت حفظ ذلك الشكل: mark(4); في Main.
إن أعلنت mark محليًا خاصًا بها — مثلًا int tag = 1; داخل الأقواس المعقوفة — فذلك tag غير مرئي لـ Main. محاولة Console.WriteLine(tag); في Main تفشل لنفس سبب فشل كتابة n من Main. أقواس mark المعقوفة جدار لأسماء أُعلنت داخلها.

ما يحميه الجدار

اقرأ التقسيم بكلمات بسيطة. الأسماء المعلنة في Main تبقى في Main ما لم تمرّر قيمها في استدعاء. الأسماء المعلنة في mark — معاملات ومحليات — تبقى في mark. الاستدعاء يحمل قيمًا، لا الأسماء نفسها. التحميل الزائد من الصفحة السابقة مهارة مختلفة: عدة دوال باسم دالة مشترك واحد. النطاق عن أين يُسمح لاسم متغير أو معامل أن يظهر في المصدر.
عرض paint متبقٍ يمكن أن يبقى في نفس الملف ويشوّش الشاشة إن استدعى Main ما زال paint("ok"). صفِّ Main إلى استدعاء mark الذي تختبره. لا تُعشّش mark داخل أقواس Main المعقوفة. الدوال تجلس داخل الصنف، بجانب Main.
كتابة Console.WriteLine("n"); في Main تكتب الحرف n بين علامتي اقتباس. لا تكتب المعامل. أبقِ Console.WriteLine(n) داخل mark حين تريد القيمة التي وصلت عبر الاستدعاء. كتابة mark(); بأقواس فارغة تفشل عندما يقول الرأس ما زال mark(int n) — يجب أن يرسل الاستدعاء int، سواء حرفًا مثل 4 أو محليًا مثل room.

يمكنك كتابة mark(int n)، وكتابة n داخل تلك الدالة، وإبقاء n خارج Main. يمكنك إعلان room في Main وتمرير room إلى mark. الشاشة تعرض القيمة التي عبرت الاستدعاء. الأسماء لا تتسرب عبر الأقواس المعقوفة وحدها. الصفحة التالية هي recursion، حيث تستدعي الدالة نفسها بوسيط أصغر حتى شرط توقف ينهي السلسلة.

الشاشة تحمل القيمة التي عبرت

الملف الذي تحتفظ به يكتب 4 عندما يستدعي Main السطر mark(4);. الاسم n في سطر الكتابة داخل mark، والحرف n ليس على الشاشة كتسمية مطبوعة إلا إن اقتبسته. تعشيش mark داخل Main ليس الشكل الذي تبنيه هذه الدرس.

🧠 اختبر معرفتك

جاهز للبدء

اختبر معرفتك

تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع

❓
6
الأسئلة
🎯
70%
للنجاح
♾️
∞
الوقت
🔄
∞
المحاولات

📝 التعليمات

  • اقرأ كل سؤال بعناية
  • اختر أفضل إجابة لكل سؤال
  • يمكنك إعادة الاختبار عدة مرات كما تريد
  • سيتم عرض تقدمك في الأعلى