آخرین بروزرسانی 1 ماه قبل

جهش در C#چیست؟

متغیر جهش‌دهنده (Mutator) در سی پلاس پلاس: کلید تغییر داده‌ها!

سلام دوستان! توی این مقاله می‌خوایم در مورد یه مفهوم خیلی مهم توی برنامه‌نویسی شیء‌گرا (Object-Oriented Programming) به اسم متغیر جهش‌دهنده (Mutator) صحبت کنیم. شاید اسمش یکم ترسناک به نظر برسه، ولی قول می‌دم خیلی ساده و قابل فهم توضیحش بدم. فکر کنین شما یه کلاس (Class) دارین که یه سری اطلاعات رو نگه می‌داره. متغیر جهش‌دهنده یه جور روش (Method) هست که به شما اجازه می‌ده این اطلاعات رو تغییر بدین. به همین سادگی!

برای اینکه بهتر متوجه بشین، بیایید یه مثال ساده رو با هم بررسی کنیم. فرض کنید ما یه کلاس به اسم Dog (سگ) داریم. این کلاس یه سری ویژگی‌ها مثل اسم (name) و سن (age) رو نگه می‌داره.

چرا به متغیر جهش‌دهنده نیاز داریم؟

حتما می‌پرسین چرا نمی‌تونیم مستقیماً به اسم و سن سگ دسترسی داشته باشیم و اون‌ها رو تغییر بدیم؟ جواب اینه که این کار ممکنه باعث بشه که اطلاعات کلاس ما به صورت ناخواسته تغییر کنه و برنامه دچار مشکل بشه. متغیرهای جهش‌دهنده به ما کمک می‌کنن تا با دقت بیشتری اطلاعات رو تغییر بدیم و مطمئن بشیم که هیچ اتفاق بدی نمی‌افته. این به principle of encapsulation کمک میکنه.

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

مثال عملی: کلاس Dog و متغیر جهش‌دهنده

بیایید کد کلاس Dog رو ببینیم:


#include <iostream>
#include <string>

class Dog {
private:
    std::string name;
    int age;

public:
    // سازنده (Constructor)
    Dog(std::string dogName, int dogAge) : name(dogName), age(dogAge) {}

    // متد دسترسی (Accessor) برای اسم
    std::string getName() const {
        return name;
    }

    // متد دسترسی (Accessor) برای سن
    int getAge() const {
        return age;
    }

    // متغیر جهش‌دهنده (Mutator) برای اسم
    void setName(std::string newName) {
        name = newName;
    }

    // متغیر جهش‌دهنده (Mutator) برای سن
    void setAge(int newAge) {
        if (newAge >= 0) { // چک کردن اینکه سن معتبر باشه
            age = newAge;
        } else {
            std::cout << "سن نمی تونه منفی باشه!" << std::endl;
        }
    }

    // یه متد دیگه
    void bark() {
        std::cout << "Woof! Woof!" << std::endl;
    }
};

int main() {
    Dog myDog("Buddy", 3);

    std::cout << "اسم سگ: " << myDog.getName() << std::endl;
    std::cout << "سن سگ: " << myDog.getAge() << std::endl;

    myDog.setName("Max");
    myDog.setAge(4);

    std::cout << "اسم جدید سگ: " << myDog.getName() << std::endl;
    std::cout << "سن جدید سگ: " << myDog.getAge() << std::endl;

    myDog.setAge(-1); // تلاش برای تنظیم سن به مقدار منفی

    return 0;
}
    

توی این کد، متغیرهای جهش‌دهنده setName و setAge وظیفه تغییر اسم و سن سگ رو بر عهده دارن. همونطور که می‌بینین، ما توی متغیر جهش‌دهنده setAge یه شرط گذاشتیم که اگه کسی بخواد سن سگ رو به یه مقدار منفی تغییر بده، یه پیغام خطا نشون داده بشه. این یه مثال ساده از اینه که چطور می‌تونیم با استفاده از متغیرهای جهش‌دهنده از اطلاعات کلاس خودمون محافظت کنیم.

متدهای دسترسی (Accessors) و جهش‌دهنده (Mutators)

به متدهایی که برای گرفتن (read) مقادیر متغیرهای یک کلاس استفاده می‌شن، متدهای دسترسی (Accessor Methods) می‌گن. مثال‌های getName() و getAge() در کلاس Dog متدهای دسترسی هستن. به این متدها، Getter هم گفته می‌شه.

متدهایی که برای تغییر (write) مقادیر متغیرهای یک کلاس استفاده می‌شن، متدهای جهش‌دهنده (Mutator Methods) می‌گن. مثال‌های setName() و setAge() در کلاس Dog متدهای جهش‌دهنده هستن. به این متدها، Setter هم گفته می‌شه.

خلاصه

متغیر جهش‌دهنده یه روش مهم برای کنترل دسترسی به اطلاعات کلاس‌هاست. اون به ما کمک می‌کنه تا اطلاعات رو به صورت امن و کنترل‌شده تغییر بدیم و از بروز مشکلات احتمالی جلوگیری کنیم. با استفاده از متغیرهای جهش‌دهنده، می‌تونیم کدهای قوی‌تر و قابل اطمینان‌تری بنویسیم. به این توجه کنید که متدهای دسترسی (Accessor) و متغیرهای جهش‌دهنده (Mutator) به همراه هم کار میکنن و encapsulation رو در برنامه نویسی شی گرا فراهم میکنند.

مزایای استفاده از متغیرهای جهش‌دهنده

  • کنترل دسترسی: متغیرهای جهش‌دهنده به شما اجازه می‌دن که نحوه دسترسی و تغییر داده‌ها رو کنترل کنین.
  • اعتبارسنجی داده‌ها: شما می‌تونین قبل از اینکه داده‌ای تغییر کنه، اون رو بررسی کنین و مطمئن شین که معتبره. مثل بررسی سن در مثال بالا.
  • انعطاف‌پذیری: متغیرهای جهش‌دهنده به شما اجازه می‌دن که منطق مربوط به تغییر داده‌ها رو در یک مکان متمرکز کنین. اگه بعداً نیاز به تغییر این منطق داشته باشین، فقط کافیه متغیر جهش‌دهنده رو تغییر بدین.
  • بهبود امنیت: با کنترل دسترسی به داده‌ها، امنیت برنامه خودتون رو افزایش میدین.

جدول مقایسه متغیرهای دسترسی و جهش دهنده

ویژگی متغیر دسترسی (Getter) متغیر جهش‌دهنده (Setter)
وظیفه خواندن مقدار یک متغیر تغییر مقدار یک متغیر
پارامتر ورودی ندارد (معمولا) دارد (مقدار جدید)
نوع مقدار برگشتی نوع متغیری که داره خونده میشه ندارد (void)
مثال getName(), getAge() setName(), setAge()

امیدوارم این مقاله تونسته باشه مفهوم متغیر جهش‌دهنده رو به خوبی توضیح بده. اگه سوالی داشتین، حتما بپرسین!

نکته پایانی

یادتون باشه که توی طراحی کلاس‌ها، استفاده درست از متدهای دسترسی و جهش‌دهنده خیلی مهمه. با این کار می‌تونین کدهای تمیزتر، امن‌تر و قابل نگهداری‌تری داشته باشید. در ضمن، همه‌ی فیلدهای یک کلاس نباید حتما Getter و Setter داشته باشند. فقط اونهایی که نیاز دارید دسترسی داشته باشید یا مقدارشون تغییر کنه، کافیه.

توجه:

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

موفق باشین و کدنویسی خوبی داشته باشید!

کلیدواژه‌ها:

  • متغیر جهش‌دهنده (Mutator)
  • متغیر دسترسی (Accessor)
  • کلاس (Class)
  • شیء‌گرایی (Object-Oriented Programming)
  • سی پلاس پلاس (C++)
  • Encapsulation
  • Getter
  • Setter
متغیر جهش‌دهنده (Mutator) دقیقا چیه؟
متغیر جهش‌دهنده یه متد (Method) توی کلاس هست که به شما اجازه می‌ده مقدار یک متغیر خصوصی (private) رو تغییر بدین.
چرا باید از متغیر جهش‌دهنده استفاده کنیم؟
برای کنترل دسترسی به داده‌ها و جلوگیری از تغییر ناخواسته اون‌ها.
تفاوت متغیر جهش‌دهنده با متغیر دسترسی چیه؟
متغیر دسترسی برای خوندن مقدار یک متغیر استفاده می‌شه، در حالی که متغیر جهش‌دهنده برای تغییر مقدار اون استفاده می‌شه.
آیا هر کلاسی باید متغیر جهش‌دهنده داشته باشه؟
نه، فقط برای متغیرهایی که نیاز دارین مقدارشون تغییر کنه باید متغیر جهش‌دهنده تعریف کنین.
اگه یک کلس متغیر جهش دهنده نداشته باشه، چی میشه؟
اون کلاس immutable هست، یعنی بعد از ساخت، دیگه نمیشه محتویاتش رو تغییر داد.

به اشتراک گذاشتن این مطلب در شبکه های اجتماعی

امتیاز شما به این مطلب

امتیاز: 5 از 5 (مجموع 1 رای)

اولین نفری باشید که در مورد این مقاله نظر می دهید!

6259- V10
Terms & Conditions | Privacy Policy

techfeed.ir© 2024 All rights reserved