قسمت های دیگر این مطلب:

برای دسته بندی فعالیت‌ها از متدها استفاده می‌شود، اگر از متد استفاده نکنید سورس شما نا خوانا خواهد بود و مدیریت نرم افزار را مشکل خواهد شد.

ساختار متدها به شکل زیر است:

public int summation(int a, int b){
   return a + b;
}

سطر اول: public به این معناست که این متد در سطح public فعالیت می‌کند.

سطر اول: نوع داده int نشان دهنده نوع خروجی متد است.

سطر اول: summation نام متد است و داده‌های درون پرانتز ورودی‌های این متد هستند.

سطر دوم: از return برای منعکس کردن نتیجه استفاده می‌شود. با توجه به عبارت a + b نتیجه می‌گیریم دو a و b از نوع int در سطر اول و در پرانتز مقابل summation دریافت شده و در سطر دوم و با return با هم جمع شده و فعالیت این متد تکمیل می‌شود.

در کلاس mainActivity زیر قصد داریم از متد summation به صورت عملی استفاده کنیم:

public class MainActivity extends AppCompatActivity {

  public int summation(int a, int b){
     return a + b;
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toast.makeText(this, ""+ summation(10, 20), Toast.LENGTH_SHORT).show();
  }
}
  • در سطر اول که به صورت پیش فرض ایجاد شده است، نام کلاس را می‌بینید.
  • در سطر سوم متد summation با دو ورودی از نوع int ایجاد شده است.
  • در سطر چهارم دو ورودی متد در هم ضرب و با return به محل فراخوانی فرستاده می‌شوند.
  • در سطر 11 با استفاده از متد summation دو عدد را در هم ضرب می‌کنیم. لازم به ذکر است که از ""+ به این دلیل استفاده کردیم که این بخش نیازمند string است ولی خروجی summation از نوع int است.

اگر مثال بالا را در ماشین مجازی اندروید تست کنید خواهید دید در صفحه نمایش عدد 30 به نمایش در می‌آید.

چرا از متدها استفاده می‌کنیم؟

سوال فوق ‍‍پاسخ‌های بسیاری دارد. وقتی از متدها استفاده می‌کنید فرایند مدیریت برنامه ساده تر می‌شود. فرض کنید در برنامه شما ده بار قرار است اتصال به wifi چک شود و در صورت وصل نبودن کاربر به wifi پیام مناسب برای او نمایش داده شود.

حال تصور کنید هر یک بار از این ده بار باید پنج سطر کد برای این کار بنویسید، این یعنی 50 سطر کد تنها برای بررسی متصل بودن یا نبودن به wifi و نمایش پیام در صورت لزوم نیاز دارید.

برای عملیات مذکور یک متد می‌نویسیم و هر کجا به آن نیاز داشتیم تنها اسم این متد را به کار می‌بریم تا برنامه با مراجعه به متد عملیات لازم را انجام دهد.

حال فرض کنید در برنامه خود از روش مذکور استفاده نکردید و بدون متد در 10 جای برنامه عملیات بررسی وصل بودن به wifi را انجام دادید. پس از مدتی تصمیم گرفتید الگوریتم بررسی اتصال به wifi را کمی تغییر دهید، باید این تغییر در همه جای برنامه انجام پذیرد، و شاید اگر یک جا را فراموش کنید کل برنامه با مشکل مواجه شود. پس با استفاده از متد‌ها حتی رفع عیب از برنامه بسیار ساده می‌شود.

الگوریتم به چه معناست

مجموعه‌ای از دستورات است که به ترتیب اجرا می‌شوند و یک مساله را حل می‌کنند. مثلا در ادامه مثال‌هایی از الگوریتم‌های ریاضی را می‌آوریم که با آن‌ها بتوانیم فاکتوریل و یا مقسوم علیه‌های یک عدد را بدست آوریم.

چند مثال پیچیده از از متدها در Java

الگوریتم محاسبه فاکتوریل:

فاکتوریل کاربرد گسترده‌ای در ریاضیات دارد. فاکتوریل عدد n عبارت است از حاصلضرب 1 تا n. در ضمن فاکتوریل 0 و 1 به صورت مشترک 1 می‌باشد.

public class MainActivity extends AppCompatActivity {

  public int factorial(int a){
    if(a == 0){
      return 0;
    }
    int fact= 1;
    for (int i= a; i>= 1; i--){
      fact =fact * i;
    }
     return fact;
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toast.makeText(this, ""+ factorial(1), Toast.LENGTH_SHORT).show();
  }
}

در خط سوم متد factorial را تعریف کردیم و برای آن یک ورودی از نوع int اختصاص دادیم.

در خط چهارم بررسی می‌کنیم که اگر ورودی برابر صفر بود بدون نیاز به محاسبه مقدار صفر باز گردد.

در خط هفت یک متغیر به نام fact برای ذخیره نتیجه محاسبات ایجاد کردیم.

در خط هشت پارامتر اولی که به این حلقه داده می‌شود متغیر i را برابر ورودی متد می‌کند. پارامتر دوم شرط برای چرخش حلقه را در بر دارد، و پارامتر سوم گام حلقه را در هر مرحله یک عدد کاهش می‌دهد.

در خط نهم حاصل ضرب fact و i در متغیر fact ریخته می‌شود. برای اولین محاسبه مقدار fact با توجه به خط هفت برابر یک است.

در خط یازدهم نتیجه محاسبه شده در fact با return خارج می‌گردد، و در نهایت با Toast نمایش داده می‌شود.

مقسوم علیه‌های عدد:

هر عددی حتما به یک و خودش قابل تقسیم است، البته اگر اول نباشد مقسوم علیه‌های دیگری نیز دارد. برای پیاده سازی الگوریتم محاسبه مقسوم علیه‌های عدد n باید میزان باقیمانده مقسوم علیه آن عدد از یک تا عدد n را بررسی کنیم. هر کجا باقیمانده تقسیم صفر بود نتیجه را در نمایشگر چاپ کند.

public class MainActivity extends AppCompatActivity {

  public void divisions(int a){
    for(int i=1; i <= a; i++){
      if(a % i == 0) {
        Toast.makeText(this, "" + i, Toast.LENGTH_SHORT).show();
      }
    }
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    divisions(8);
  }
}

در خط سوم یک متد با نام divisions ایجاد کردیم که یک ورودی دارد و نوع آن void است. هر گاه بخواهیم متدی ایجاد کنیم که بازگشتی به مکان فراخوانی ندارد از این نوع استفاده می‌کنیم. اگر به خط 15 مراجعه کنید خواهید دید تنها متد divisions فراخوانی شده است و قرار نیست چیزی از اینجا چاپ شود.

در خط چهارم یک حلقه می‌بینید که از یک تا عدد ورودی متد divisions را بررسی می‌کند. در خط 5 بررسی می‌شود اگر باقیمانده تقسیم آن عدد بر ورودی divisions برابر صفر بود یعنی آن عدد بر عدد ورودی متد بخش پذیر است.

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

برای تمرین الگوریتم زیر را پیاده سازی کنید:

  • الگوریتمی برای بررسی اول بودن یا نبودن یک عدد

نکته مهم: برای تسلط به این مبحث برای خود الگوریتم‌هایی را تعریف و پیاده سازی کنید.