• 1401/06/19

مفهوم void و چگونگی استفاده از آن :

سلام استاد وقت بخیر  

امیدوارم حالتون خوب باشه

 استاد در پارت ۹ که در مورد توابع هستش ،  فرق void و int هنگام استفاده از اونها و هنگام فراخوانی رو درک نکردم. شما عرض کردید که اگر از int استفاده کنیم تابع یک مقداری رو بر میگردونه ، اما اگر از void استفاده کنیم ، تابع مقداری را بر نمیگردونه ، درصورتی که در ادامه فیلم دوتا تابع فراخوانی شدن و در صفحه چاپ شدن! این برگردوندن حساب نمیشه!؟

یعنی هم تابع SayHello و هم تابع Sum از نظر عملکردی فرقی بینشون ندیدم جز فراخوانیشون در تابع main . در void اسم خوده تابع رو صدا زدید اما در int ، با استفاده از console.writLine اون رو چاپ کردید.

ممنون میشم اگر بیشتر در این را رابطه توضیح بفرمایید.

سوال دیگه اینکه چرا تابع Main از نوع void هستش! اگر تابع void چیزی رو برنمیگردونه پس چرا ما خروجی چاپ میکنیم! این خروجی ها  برگردوندن حساب نمیشه؟!

و به عنوان سوال آخر چه زمانی از void  استفاده کنیم و چه زمانی از غیر void ?

 

  • 1401/06/19
  • ساعت 19:08

با سلام و احترام.

بنظرم ویدیوی مربوط به فانکشن هارو یک بار دیگه ببینید.

همچنین همیشه سعی کنید منبعتون یک دوره نباشه و برید سرچ کنید و از منابع دیگر هم استفاده کنید.

 

شما اینطور که معلومه مفهوم تابع رو متوجه نشدید.

یک تابع مثل یک ظرف می مونه که شما یک قطعه از کد رو یک بار داخل اون ظرف ذخیره می کنید و بعدا در جاهای مختلف ازش استفاده می کنید و دیگه لازم نیست اون فانکشن رو دوباره بنویسید.

 

قطعه کد زیر رو فرض کنید

using System;

  class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine(2+8);    
    }
  }

2 عدد رو جمع می کنه و میده به Console.WriteLine که روی صفحه چاپ کنه.

 

خب حالا اگر بخواهیم به شکل تابع بنویسیم میشه به این شکل:

using System;

  class Program
  {
    static void Main(string[] args)
    {
        plus();
    }
    
    public static void plus() {
    Console.WriteLine(2+8);
    }
  }

الان فرق خاصی نکرد فقط ما یک ظرف درست کردیم و یک قطعه کد رو ذخیره کردیم داخلش و اسمشم گذاشتیم plus

و plus رو صدا زدیم و کد های درونش رو اجرا کردیم.

حالا 20 بار هم plus رو صدا بزنیم ۲۰ بار اون کد ها اجرا میشه.

به کلمات کلیدی public و static کاری نداشته باشید اون هارو جلوتر یاد می گیرید.

چیزی که مهمه اینه که ترتیب این کلمات باید رعایت باشه.

یعنی شما نباید یک تابع رو به این شکل تعریف کنید:

 plus() void static public {
    Console.WriteLine(2+8);
}

باید به همون ترتیب بالا باشه.

 

خب تابع بالا یک تابع ساده بود.

حالا می خواهیم کد های ما اون مقداری که ما می خواهیم رو جمع کنه.

using System;

  class Program
  {
    static void Main(string[] args)
    {
        plus(9,16);
    }
    
    public static void plus(int x, int y) {
    Console.WriteLine(x+y);
    }
  }

خب حالا این دفعه وقتی تابع رو صدا زدیم باید ۲ تا عدد رو بهش بدیم.

عدد اول که بهش میدیم به عنوان متغیر x درون تابع ما در دسترس هست.

و دومی هم به همین ترتیب.

به x و y میگن ورودی. هر اسمی که خودمون بخواهیم می تونیم براش بزاریم.

همچنین نوع اون متغیر رو هم باید مشخص کنیم، در مورد نوع داده ها در سی شارپ می تونید در وب جستجو کنید.

وقتی ما گفتیم نوع ورودی باید عدد باشه اگر ما هرچیز دیگری بدیم ارور میده مثل اعداد اعشاری.

 

خب الان تابع ما چیزی بر نمی گردونه. چون ما الان به جمع اعداد دسترسی نداریم.

2 تا عدد دادیم بهش و خودش هر بلایی بخواد سرشون میاره.

خب شاید ما بخواهیم به جمع اعداد دوباره مثلا 2 تا دیگه اضافه کنیم اما چون مقداری برگشت داده نمیشه نمی تونیم.

 

یعنی چی برگشت داده نمیشه؟ یعنی اون تابع خروجی اون کارهایی که انجام داده رو به ما نمیده.

مثال:

using System;

  class Program
  {
    static void Main(string[] args)
    {
        int sum = plus(9,16);
    }
    
    public static void plus(int x, int y) {
    Console.WriteLine(x+y);
    }
  }

الان ما تابع رو صدا زدیم و ریختیم توی sum.

اما خب داخل sum چیزی ریخته نمیشه چون تابعی که ما تعریف کردیم خروجی به ما نمیده.

 

اگر بخواهیم بده چی؟

کد رو به این شکل تغییر میدیم:

using System;

  class Program
  {
    static void Main(string[] args)
    {
        int sum = plus(9,16);
    }
    
    public static int plus(int x, int y) {
    return x+y;
    }
  }

خب. اون کلمه کلیدی void که گذاشتیم یعنی تابع به ما خروجی تحویل یا به اصطلاح بر نمی گردونه.

اما ما گذاشتیم int یعنی که قراره عدد صحیحی رو به ما برگردونه.

اگر می خواستیم رشته ی متنی رو به ما برگردونه جای int باید string می گذاشتیم.

هر چیزی به غیر از void بگذاریم یعنی تابع ما چیزی رو بر می گردونه و باید از کلمه کلیدی return داخل تابع استفاده کنیم وگرنه ارور میده.

خب جلوی return باید بگیم چیرو برگردونه که ما گفتیم جمع x و y رو برگردونه.

حالا چون مقداری داره برگشت داده میشه داخل متغیر sum جمع اون 2 عددی که داخل ورودی داده بودیم قرار می گیره.

 

و این نکته رو بگم اینکه یک تابع مقداری رو بر می گردونه معنیش این نیست که اون مقدار چاپ بشه.

فقط اون مقدار برگشتی رو به ما میده که عملیات لازم رو روش انجام بدیم. 

مثلا چاپش کنیم یا بریزیم داخل یک متغیر.

 

الان دیگه ما به جمع دو عدد دسترسی داریم و می تونیم هر بلایی که دلمون خواست سرش بیاریم.

به عنوان مثال من می خوام جمع ۲ عدد رو تقسیم بر ۲ کنم و نتیجه رو چاپ کنم:

using System;

  class Program
  {
    static void Main(string[] args)
    {
        int sum = plus(9,16);
        Console.WriteLine(sum / 2);
    }
    
    public static int plus(int x, int y) {
    return x+y;
    }
  }

 

خب حالا تابع Main چیه.

ببینید دوست عزیز پروژه هایی که می نویسید باید یک نقطه ی شروع داشته باشن.

یک پروژه دارید که توش کلی فایل و کلاس و متد هست سیستم از کجا می خواد بفهمه کدومو اول اجرا کنه.

به صورت پیش فرض c# میاد در فایل Program.cs کلاس Program و تابع Main رو به عنوان نقطه شروع برنامه اجرا می کنه و حالا اینکه برنامه در ادامه بخواد چی کار بکنه رو شما مشخص خواهید کرد.

 

امیدوارم متوجه توضیحات شده باشید.

ممکنه کد هایی که من نوشتم ارور بده چون تستش نکردم و همینجوری توی ادیتور سایت نوشتم.

اگر بازم متوجه نشدید پیشنهاد می کنم یکم با زبانی مثل پایتون کار کنید که تقریبا همین مفاهیم رو دارن ولی به شکل ساده تری هستن.

این جوری راحت تر مفاهیم رو در سی شارپ متوجه میشید.

اگر می تونید موازی با هردو کار کنید البته لازم نیست با پایتون حرفه ای کار کنید فقط در حدی که بتونید مفاهیمی که در سی شارپ متوجه نمیشید رو اونجا تمرین کنید کفایت می کنه.


  • 1401/06/19
  • ساعت 23:15

توضیحات شما ، کامل و عالی بود ؛ از اینکه وقت گذاشتید و بنده رو راهنمایی کردید سپاسگزارم .

 

 

 


  • 1401/06/20
  • ساعت 08:13

با تشکر از شما دوست عزیز بابت توضیحات کاملتون


logo-enamadlogo-samandehi