دوره‌ها / JAVA / ورودی کاربر (Java User Input)

ورودی کاربر (Java User Input)

15 دقیقه Article

دریافت ورودی (Scanner): تعامل با کاربر ⌨️👥

تا اینجا تمام برنامه‌های ما خروجی‌محور بودند. کلاس Scanner به ما اجازه می‌دهد تا ورودی‌های کاربر (متن، عدد و...) را از کیبورد دریافت کنیم و برنامه‌های تعاملی بسازیم.

۱. راه‌اندازی اسکنر

این کلاس در پکیج java.util قرار دارد. ابتدا باید آن را وارد کرده و یک شیء از آن بسازیم:

{code_block('import java.util.Scanner;\n\nScanner myObj = new Scanner(System.in); // System.in یعنی ورودی استاندارد (کیبورد)')}

۲. متدهای دریافت ورودی 📥

  • nextLine(): دریافت یک خطِ کامل متن (String).
  • next(): دریافت فقط یک کلمه.
  • nextInt(): دریافت عدد صحیح.
  • nextDouble(): دریافت عدد اعشاری.
  • nextBoolean(): دریافت true/false.

مثال کامل تعاملی:

{code_block('System.out.println("Enter name:");\nString name = myObj.nextLine();\nSystem.out.println("Name is: " + name);')}
نکته حیاتی: اگر بعد از nextInt() بخواهید nextLine() بزنید، ممکن است برنامه ورودی متن را نادیده بگیرد (به دلیل کاراکتر اینتر باقی‌مانده). در چنین مواردی یک nextLine() خالی وسط آن‌ها قرار دهید.
بستن اسکنر: در انتهای برنامه حرفه‌ای، بهتر است با دستور myObj.close(); اسکنر را ببندید تا منابع سیستم آزاد شوند.
امنیت ورودی: همیشه فرض کنید کاربر ممکن است به جای عدد، متن وارد کند. در فصل‌های آینده یاد می‌گیریم چطور با try...catch از بسته شدن ناگهانی برنامه در این مواقع جلوگیری کنیم.
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: معماری سیستم‌های شیءگرا 🏗️💎

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

۱. کد تمیز و اصل ابزارمندی (Abstraction)

در پروژه‌های بزرگ صنعتی، ما سعی می‌کنیم تا حد امکان وابستگی‌ها (Dependencies) را کاهش دهیم. استفاده درست از Interface و Abstract Class باعث می‌شود کدهای ما انعطاف‌پذیر باشند. به قولی: "برنامه‌نویسی برای اینترفیس، نه برای پیاده‌سازی".

۲. مدیریت پکیج‌ها و جلوگیری از تداخل

پکیج‌بندی حرفه‌ای فقط برای نظم نیست؛ بلکه برای کنترلِ Visibility است. با استفاده درست از سطوح دسترسی (مثل protected و default) در سطح پکیج، می‌توانید از دسترسی‌های غیرمجاز به متدهای داخلی کلاس‌ها جلوگیری کنید.

۳. ترکیب به جای وراثت (Composition over Inheritance)

وراثت (Inheritance) ابزار قدرتمندی است، اما استفاده بیش از حد از آن باعث ایجاد "زنجیره‌های سفت‌وسخت" (Tight Coupling) می‌شود. در بسیاری از موارد، استفاده از ترکیب (داشتنِ یک شیء داخل شیء دیگر) راه‌حل منعطف‌تری برای گسترشِ کدهای شماست.

نکته پایانی: هدف از یادگیری این مفاهیمِ پیشرفته، نوشتن کدی است که نه تنها امروز کار کند، بلکه سال‌ها بعد هم به راحتی قابل تغییر و توسعه باشد.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

خواندن عدد از کاربر Medium
سوال تمرین

با استفاده از Scanner، یک عدد صحیح از ورودی بخوانید و آن را ضرب در 2 کرده و چاپ کنید. از شیء sc که تعریف شده استفاده کنید.

پاسخ تمرین
JAVA
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    System.out.println(n * 2);
  }
}

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.