رفتن به مطلب

تفاوت function و operator در برنامه نویسی


light rocket
 اشتراک گذاری

Recommended Posts

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

فرق بین تابع و عملگر رو متوجه نمیشم. ویژگی های ظاهری‌شون رو کاری ندارم. ماهیتشون مد نظرمه

مگر جز اینه که هر دو به نوعی از قبل برنامه ریزی میشن که وقتی اسمشونو میاری ، یه عمل مشخصی رو روی اطلاعات داده شده انجام بدن؟ حالا یکیشون میتونه یه علامت ساده باشه یکیشون حالت متنی داره

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

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

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

لینک به دیدگاه
Share on other sites

6 ساعت قبل، light rocket گفته است:

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

فرق بین تابع و عملگر رو متوجه نمیشم. ویژگی های ظاهری‌شون رو کاری ندارم. ماهیتشون مد نظرمه

مگر جز اینه که هر دو به نوعی از قبل برنامه ریزی میشن که وقتی اسمشونو میاری ، یه عمل مشخصی رو روی اطلاعات داده شده انجام بدن؟ حالا یکیشون میتونه یه علامت ساده باشه یکیشون حالت متنی داره

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

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

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

این مقایسه اصلا اشتباهه .

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

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

شما به نظرم عجله ای نداشته باشید . بعد از اینکه در دوره آموزشی بیش تر پیش برید میتونید خاصیت توابع رو در زبان برنامه نویسی مدنظرتون متوجه بشید .

موفق باشید

لینک به دیدگاه
Share on other sites

operator ها خودشون تابع به حساب میان که البته محدود به یک سری عملیات ریاضی میشن(جمع تفریق و غیره)
به طول مثال در سی شارپ زمانی که شما دو رشته رو جمع میکنید :
"my name is" + "sajad"
در واقعا این اوپراتور در دل خودش متد استاتیک concat رو فراخوانی میکنه به این شکل :
string.concat(string st1,string str2);
شما از اوپراتور ها صرفا برای تعریف عملیات ریاضی در تایپ های خودتون استفاده میکنید مثلا کد زیر رو در نظر بگیرید(سی شارپ) :
public class Point {
public int x {get;set;}
public int y {get;set;}
}
حالا شما دو نقطه(آبجکت از کلاس پوینت دارید)
برای جمع دو نقطه میاید یه اوپراتور تعریف میکنید به شکل زیر :
public static Point Operator+(Point p1 , Point p2)
{
return new Point {x = p1.x + p2.x , y = p1.y + p2.y } ;
}

حالا همین کد رو بجای اینکه مستقیا در بدنه تعریف اوپراتور بنویسید میتونید در یک متد مجزا به این شکل بنویسید :
public static Point Add(Point p1 , Point p2)
{
return new Point {x = p1.x + p2.x , y = p1.y + p2.y } ;
}
و در اپراتور صرفا این متد رو صدا بزنید :
public static Point Operator+(Point p1 , Point p2){

return Add(p1,p2)
}
حالا چرا میایم توی دل اوپراتور از متد استفاده میکنیم ؟؟خب مگه مریضیم ؟؟ مستقیم بریم همون متد رو صدا بزنیم دیگه ؟؟
خوانایی بیشتر,درک راحت تر 
کدوم یک از اینا خوندن و درکش راحت تره ؟ :
2*3 + 4
Math.sum(4,Math.Multiply(2,3))

 

لینک به دیدگاه
Share on other sites

8 ساعت قبل، MehranPlt گفته است:

این مقایسه اصلا اشتباهه .

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

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

شما به نظرم عجله ای نداشته باشید . بعد از اینکه در دوره آموزشی بیش تر پیش برید میتونید خاصیت توابع رو در زبان برنامه نویسی مدنظرتون متوجه بشید .

موفق باشید

خیلی ممنون از جوابتون

لینک به دیدگاه
Share on other sites

6 ساعت قبل، sajad564 گفته است:

operator ها خودشون تابع به حساب میان که البته محدود به یک سری عملیات ریاضی میشن(جمع تفریق و غیره)
به طول مثال در سی شارپ زمانی که شما دو رشته رو جمع میکنید :
"my name is" + "sajad"
در واقعا این اوپراتور در دل خودش متد استاتیک concat رو فراخوانی میکنه به این شکل :
string.concat(string st1,string str2);
شما از اوپراتور ها صرفا برای تعریف عملیات ریاضی در تایپ های خودتون استفاده میکنید مثلا کد زیر رو در نظر بگیرید(سی شارپ) :
public class Point {
public int x {get;set;}
public int y {get;set;}
}
حالا شما دو نقطه(آبجکت از کلاس پوینت دارید)
برای جمع دو نقطه میاید یه اوپراتور تعریف میکنید به شکل زیر :
public static Point Operator+(Point p1 , Point p2)
{
return new Point {x = p1.x + p2.x , y = p1.y + p2.y } ;
}

حالا همین کد رو بجای اینکه مستقیا در بدنه تعریف اوپراتور بنویسید میتونید در یک متد مجزا به این شکل بنویسید :
public static Point Add(Point p1 , Point p2)
{
return new Point {x = p1.x + p2.x , y = p1.y + p2.y } ;
}
و در اپراتور صرفا این متد رو صدا بزنید :
public static Point Operator+(Point p1 , Point p2){

return Add(p1,p2)
}
حالا چرا میایم توی دل اوپراتور از متد استفاده میکنیم ؟؟خب مگه مریضیم ؟؟ مستقیم بریم همون متد رو صدا بزنیم دیگه ؟؟
خوانایی بیشتر,درک راحت تر 
کدوم یک از اینا خوندن و درکش راحت تره ؟ :
2*3 + 4
Math.sum(4,Math.Multiply(2,3))

 

خیلی ممنونم بابت وقتی که گذاشتین. واقعا زحمت کشیدین

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

پس همون چیزی که تو انجمن های خارجی میگن رو شما هم تایید میکنید؟ این که اپراتور و تابع هر دو یک ماهیت دارن، فقط اپراتور استفاده ی سریع تر و ساده تری داره و تابع عموما پیچیده تره و قابل تعریف شدن توسط ماست؟

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

5 ساعت قبل، Mostafa98 گفته است:

برای چه زبان برنامه نویسی؟

کلا خود این دو مفهوم داخل برنامه نویسی مد نظرمه ، داخل ریاضیات نه

ولی دارم پایتون یاد میگیرم

لینک به دیدگاه
Share on other sites

این مساله برای زبان های مختلف فرق داره. مثلا Python که object oriented هست برای همه class ها میشه تعریف کرد که علامت های مثل + و - یا [i] چه کاری بکنه. که magic یا dunder میگن.

همه اعداد و رشته ها در پایتون object هستند و عملا object + object2 تبدیل به object.__add__(object2) میشه.

class MyClass:
    def __init__(self, value):
        self.value = value

    def __add__(self, other):
        if isinstance(other, MyClass):
            return MyClass(self.value + other.value)
        elif isinstance(other, (int, float)):
            return MyClass(self.value + other)
        else:
            raise TypeError("Unsupported operand type")

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

لینک به دیدگاه
Share on other sites

در ۱۴۰۲/۱۰/۱۰ در 00:47، Mostafa98 گفته است:

این مساله برای زبان های مختلف فرق داره. مثلا Python که object oriented هست برای همه class ها میشه تعریف کرد که علامت های مثل + و - یا [i] چه کاری بکنه. که magic یا dunder میگن.

همه اعداد و رشته ها در پایتون object هستند و عملا object + object2 تبدیل به object.__add__(object2) میشه.

class MyClass:
    def __init__(self, value):
        self.value = value

    def __add__(self, other):
        if isinstance(other, MyClass):
            return MyClass(self.value + other.value)
        elif isinstance(other, (int, float)):
            return MyClass(self.value + other)
        else:
            raise TypeError("Unsupported operand type")

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

 

از chatgpt هم پرسیدم ، جوابش کمکی نکرد

ممنونم بابت راهنمایی

لینک به دیدگاه
Share on other sites

سلام

تابع یک مفهوم کلی‌تر و جامع‌تر نسبت به عملگر هست.

به این صورت که می‌تونیم بگیم هر عملگر یک تابع خاص هست (مثلا عملگر جمع یک تابع هست که دو ورودی از نوع عدد، مثلا long، می‌گیره و خروجیش هم عدد، مثلا long، هستش).

تو هر زبان برنامه نویسی یک سری عملگر به صورت built-in وجود داره (مثل همین جمع که برای اعداد قابل استفاده است) و یک سری از زبان‌ها (مثل Cpp) به شما قابلیت ایجاد عملگر رو می‌ده که به این کار Operator Overloading گفته میشه. مثالی که دوستمون @sajad564 زدن یک نمونه از این کار توی زبان سی‌شارپ بود. در Operator Overloading هم شما عملا یک تابع تعریف می‌کنید که به صورت عملگری قابل صدا زدن هستش.

برای درک Operator Overloading لازم هست که بحث شی‌گرایی و مفاهیم کلاس و شی رو بلد باشین.

ویرایش شده توسط Paxton
لینک به دیدگاه
Share on other sites

سلام ممکنه این نظر من از دید بعضی از دوستان اشتباه باشه ولی به نظرم اول برید ویدیوهای آموزشی پایه و مقدماتی برنامه نویسی رو ببینید مثلا آموزش C++ که اونجا میتونید بدونید تابع و عملگر و هرکدوم از اینها چی هستن و با مثال های ساده درکش کنید بعد زبان های دیگه براتون ساده تر میشه (منظورم C++ حرفه ای نیست)

من اون موقع که دانشجو بودم بعضی درسارو با فیلم آموزشی و تمرین خیلی بهتر متوجه میشدم تا کتاب و متن

لینک به دیدگاه
Share on other sites

به گفتگو بپیوندید

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

مهمان
ارسال پست در این تاپیک...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

 اشتراک گذاری

×
  • اضافه کردن...