문제

내가 항상 이해했듯이, 프로그램 상태 (또는 IO와 관련이있는 것)로의 변경은 부작용입니다. 변화가 글로벌 변수 또는 객체의 개인 필드에서 발생하는지 여부는 중요하지 않습니다. 아무것도 반환하지 않는 모든 방법은 전혀 아무것도하지 않거나 부작용이 있습니다.
저의 혼란은 우리 대학의 강사 중 한 명 (여전히 학생이므로 아직 전지 전지가 아닌)에서 나옵니다.) 세트에게 부작용이 없다고 말합니다.

도움이 되었습니까?

해결책

강사가 잘못되었습니다. 여기에 전체 기사를 붙여 넣지 않은 것에 대해 So 편집자들에게 사과하면서 Wikipedia가 말하는 것입니다.

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

돈 견적 #1 :

컴퓨터 과학에서 기능 또는 표현은 값을 생성하는 것 외에도 일부 상태를 수정하거나 호출 함수 또는 외부 세계와의 관찰 가능한 상호 작용을 갖는 경우 부작용이 있다고합니다.

돈 견적 #2 :

부작용이 있으면 프로그램의 행동은 과거의 역사에 달려 있습니다. 즉, 평가 순서가 중요합니다.

NOP NOP 세터는 항상 해당 기준을 만족시킵니다.

다른 팁

getters와 setter는 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