💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ مرتضی ترکمن
برای تغییر یک متغییر توسط function از کدام استفاده کنیم global یا call by reference
علیرضا ابراهیمی حل شده توسط علیرضا ابراهیمی

با سلام

با هر دو روش زیر میتوانیم یک متغییر که خارج از یک function نوشته شده است را تغییر داد.

کدام بهتر است؟ و چرا؟

global :

$y = 10;
    function test()
    {
        global $y;
        return ++$y;
    }
    echo test() . '<br>';
    echo $y;

call by reference

  $y = 10;
    function test(&$y)
    {
        global $y;
        return ++$y;
    }
    echo test($y) . '<br>';
    echo $y;

 

سلام

من دقیقا به سر فصل مربوطه نرسیدم ولی پاسخ رو با توجه به دو زبان kotlin , swift عرض می‌کنم .

در حال حاضر طبق گفته‌های برنامه نویسان حرفه ای نظیر آقای سمیر رحمانی که در حال حاضر در شرکت udemy فعالیت دارند و قبلا در شرکت yellowman ایران فعالیت داشتند .

برنامه نویسی functional programming سبقت ویژه ای از برنامه نویسی به صورت کلاس بندی گرفته .

 

از نظر من اینکه کدام بهتر هست نداریم ؟‌

بلکه هر تابع بسته به کدی که شما در داخل آن نوشته اید مورد ارزیابی و استفاده قرار می‌گیرد و دلیل استفاده از functional programming به همین مقصد است . به طور مثال :‌ شما تابعی به صورت call by reference ایجاد کرده اید و بعد بنابه نیاز پروژه و در واقع اهداف پروژه اینکه شما در آینده تا چه میزان روی پروژه ی خود سرمایه گذاری کرده اید اقدام به ماژولار کردن سورس خود می‌کنید به دلیل prformance بالاتر و ماندگاری بالاتر .

به صورت کامل تر  -  شما تشخیص می‌دید که براساس کد نوشته شده بهتر از global استفاده کنید چون کار مشخصی رو انجام میده و اون رو کافی هست در کلاس‌های والد یا غیر والد فراخوانی کنید و فقط اسمش رو بیارید ولی با توجه به کدی که برحسب call by reference نوشته اید مطمئنا باید مقادیری از کلاس دیگر به داخل آن واریز شده تا کارکرد خود را داشته باشد .
بنابراین با توجه به کارکرد کد شما کارکرد آن مشخص می‌شود .

حسن سهرابیان ۰۶ بهمن ۱۳۹۸، ۱۳:۰۷

سلام و عرض وقت بخیر... در حقیقت دو مفهومی که می‌فرمایید هرکدام در جای خودش مطرح می‌شود و قابل استفاده است.

 

زمانی که شما یک متغیر یا پارامتری از تابع رو از طریق علامت & در ابتدای اون به حالت by reference تبدیل می‌کنید، در حقیقت تغییراتی که در ادامه برنامه برای اون متغیر یا آرگومان رخ میده، به رفرنس اون متغیر یا آرگومان در تابع مورد نظر هم برمیگرده... یعنی شما هربار در طول برنامه اون متغیر و یا اون تابع رو صدا بزنید، تغییرات رو هم در متغیر مذکور و هم تابع مذکور خواهید دید. نکته مهمی که وجود داره در حالتی که شما by reference می‌کنید، پارامتر یا متغیر مورد نظر در تابع شما تعریف شده است.

 

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

 

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

بهترین پاسخ
علیرضا ابراهیمی ۱۴ فروردین ۱۳۹۹، ۰۹:۳۴