در حال بارگذاری...

محدودهٔ نام

یک متد به‌نام mark با یک پارامتر بنویسید: static void mark(int n). داخل آکولاد آن پارامتر را با Console.WriteLine(n); بنویسید. از Main صدا بزنید mark(4);. صفحه باید یک خط نشان دهد: 4. نام n فقط داخل mark وجود دارد. اگر بخواهید از Main مقدار n را بنویسید، ساخت رد می‌کند. همین مرز — کدام نام‌ها را یک متد می‌بیند — چیزی است که این صفحه آموزش می‌دهد. نام کلاس عمومی را 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");. برای صفحه‌ای که خط اشتباه نشان می‌دهد SDK دات‌نت را دوباره نصب نکنید.

یک اجرای کامل را به ترتیب راه بروید. C# از Main شروع می‌کند. فراخوانی mark(4) مقدار 4 را داخل پارامتر n می‌فرستد. درون mark، WriteLine(n) مقدار 4 را می‌نویسد. وقتی mark تمام می‌شود، نام n هم تمام می‌شود. Main هرگز نام n نداشت. عدد 4 به‌صورت مقدار از فراخوانی گذشت. نام n به داخل Main نرفت.
اگر بعد از فراخوانی داخل Main بنویسید Console.WriteLine(n);، ساخت گزارش می‌کند که نام n را پیدا نمی‌کند. آن خطا درس در حال کار است: n هرگز در Main اعلام نشده. با برداشتن آن خط از Main درستش کنید، یا اگر آنجا به محلی نیاز دارید نام دیگری اعلام کنید. انتظار نداشته باشید پارامتر mark خودش در Main ظاهر شود.

نام محلی کنار پارامتر

داخل mark می‌توانید نام تازه‌ای هم اعلام کنید که پارامتر نیست. آن نام محلی فقط بین آکولادهای mark زندگی می‌کند. امید رایج مبتدی این است که نام اعلام‌شده در Main خودکار داخل هر متد کلاس دیده‌می‌شود. در این شکل چنین نیست. اگر Main داشته باشد int room = 4; و mark بخواهد بدون گرفتن آن room را بنویسد، ساخت داخل mark نام room را پیدا نمی‌کند. درستش این است که مقدار را بفرستید: mark(room); با اینکه mark هنوز به‌صورت mark(int n) اعلام شده.

محلی Main را به mark بفرستید

داخل Main اعلام کنید int room = 4;. صدا بزنید 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 است؛ آنجا متد خودش را با آرگومان کوچک‌تر صدا می‌زند تا شرط توقف زنجیره را تمام کند.

صفحه مقداری را نگه می‌دارد که گذشته

فایلی که نگه می‌دارید وقتی Main صدا می‌زند mark(4); مقدار 4 می‌نویسد. نام n در خط نوشتن داخل mark است، و حرف n روی صفحه به‌عنوان برچسب چاپ‌شده نیست مگر گیومه دورش گذاشته باشید. تودرتو کردن mark داخل Main شکل این درس نیست.

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
6
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود