سؤال

كما فهمت دائمًا، فإن أي تغيير في حالة البرنامج (أو أي شيء يتعلق بـ IO) يعد أحد الآثار الجانبية.لا يهم ما إذا كان التغيير يحدث في متغير عام أو في حقل خاص للكائن الذي يتم استدعاء الطريقة عليه.ويترتب على ذلك أن جميع الطرق التي لا تُرجع أي شيء إما لا تفعل شيئًا على الإطلاق أو يكون لها آثار جانبية.
حيرتي تأتي من أحد مدرسي جامعتنا (الذي لا يزال طالبًا وبالتالي ليس كلي العلم بعد؛)) أخبرني أن المستوطنين ليس لديهم آثار جانبية.

هل كانت مفيدة؟

المحلول

معلمك مخطئ.مع الاعتذار لمحرري SO لعدم لصق المقالة بأكملها هنا، هذا ما تقوله ويكيبيديا:

http://en.wikipedia.org/wiki/Side_effect_(computer_science)

اقتباس المال رقم 1:

في علوم الكمبيوتر، يقال أن الوظيفة أو التعبير له تأثير جانبي، بالإضافة إلى إنتاج قيمة، إذا كان يعدل أيضًا بعض الحالات أو يكون له تفاعل ملحوظ مع وظائف الاستدعاء أو العالم الخارجي.

اقتباس المال رقم 2:

في حالة وجود آثار جانبية، يعتمد سلوك البرنامج على التاريخ الماضي؛وهذا يعني أن ترتيب التقييم مهم.

تفي أدوات الضبط غير التابعة لـ NOP دائمًا بهذه المعايير.

نصائح أخرى

وحاصل على واضعي هي السكر فقط النحوي لget_ والأساليب set_. وسعهم <م> تماما ديهم (كانت على الرغم من انها ربما فكرة سيئة لبدء التغيير والتبديل في الكثير من المجالات عندما أراد كل المتصل إلى زيادة عداد أو شيء) آثار جانبية.

أولاً: أنا على علم بالعلامة الحيادية للغة! أجاب "runako" على السؤال بشكل صحيح تمامًا.ولكن في كثير من الأحيان تريد تطبيق معرفتك على العالم الحقيقي، لذلك أعتقد أنه سيكون من الجيد أن أقدم أيضًا إجابة تعالج هذه المشكلة بطريقة أكثر واقعية.

عند التعامل مع لغات العالم الحقيقي مثل c++ أو c# أو java، فحتى وظيفة nop لها آثار جانبية فعلية يمكن أن تتسبب في تنفيذ التعليمات البرمجية!

فقط فكر في المنشئين الثابتين.على الرغم من أن المواصفات لا تحدد دائمًا الوقت الذي يتم فيه تشغيل المُنشئ الثابت لفئة ما، إلا أنه في معظم الأوقات سيكون هو النقطة الزمنية التي يتم فيها الوصول إلى الأسلوب أو عضو الفصل لأول مرة.

مثال في C#:

class NotSoObvious
{
    static NotSoObvious()
    {
        CauseSomeSideEffects();
    }

    // calling this can cause the constructor to run first!
    public static void DoNothing()
    {
        return;
    }
}

والأكثر من ذلك هو أنه حتى الطريقة التي لا يتم استدعاؤها على الإطلاق يمكن أن تسبب آثارًا جانبية!فكر في الانعكاس (قدرة البرنامج على الاستعلام عن معلومات حول بنيته الخاصة).عندما تكون الطريقة موجودة ولكن لا يتم استدعاؤها، فلا يزال من الممكن اكتشافها عن طريق الانعكاس.

من المؤكد أن الطريقة التي لا تستدعيها لها تأثير جانبي على البرنامج الذي يقوم بإخراج عدد الطرق الموجودة بداخله!

كل شيء يتمحور عن هذا:إذا كنت تريد أن تعرف عن الآثار الجانبية الفعلية لإحدى الطرق، فعليك أولاً أن تحدد ما تعتبره "أثرًا جانبيًا".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top