2012-01-11 4 views
7

가능한 중복은 :
When do you use code blocks?블로깅 범위의 이점은 무엇입니까?

좋아,이 바보 같은 질문이 될 수 있으며 내가 뭔가를 분명 누락 될 수 있습니다하지만 난 천천히 C 번호를 배우면서이 잠시 동안 지금 나에게 잔소리를 유지하고있다 .

다음 코드는 분명 잘 컴파일 : 나는 {} 블록 범위 지정을 위해 사용될 수 있다는 것을 이해

public void Foo() 
{ 
    { 
     int i = 1; 
     i++; 
    } 

    { 
     int i = 1; 
     i--; 
    } 
} 

. 문제는 왜 이것을하고 싶습니까? 이 기능으로 어떤 문제가 해결됩니까?

더 쉽게 그 컨트롤, 반복 흐름 "연결"비교 간과 할 수 나는 그것이 범위의 이러한 종류로 더 혼란 코드에 추가 않는다는 것을 금지를 사용하여 볼 수있는 피해 등이 없다

+0

case 명령문은 정말 유용하기 때문에 루프에서 'i'와 같은 것을 재사용 할 때 오류가 발생하지 않습니다. – Chad

답변

6

그것은 당신의 변수 선언이 혼동 될 수 switch 문에서 유용를 :

혼동 코드 :

switch (true) 
{ 
    case true: 
     var msg = "This is true."; 
     var copy = msg; 
     break; 

    case false: 
     msg = "This is false."; 
     copy = msg; 
     break; 
} 

지우기 코드 :

switch (true) 
{ 
    case true: 
    { 
     var msg = "This is true."; 
     var copy = msg; 
     break; 
    } 

    case false: 
    { 
     var msg = "This is false."; 
     var copy = msg; 
     break; 
    } 
} 
+0

사람들이 팔레서/블록 대신 줄 바꿈 등을 사용할 때 가장 재미 있고 어리 석다. – abatishchev

+1

감사! LOL 나는 항상 스위치 문을 두 번째 방법으로 쓰고 있기 때문에 그걸 사용 해왔다. 그것에 대해 재미 있고 슬픈 부분은 내가 실제로 익명 블록이 아닌 "사례 블록"을 사용하고 있다고 생각합니다. 여전히 배우기에는 많은 것을 얻었습니다. (... – InBetween

1

'벌거 벗은'범위 지정 블록의 경우 이러한 사항에 동의하는 경향이 있습니다. 언어 디자인 관점에서 나는 그들이 암시적인 범위 지정 블록의 일반화라고 생각한다. 더 중요하다. for, whileif 조건. 예를 들면 다음과 같습니다.

foreach (var x in foos) { 
    var someMessage = x.ToString(); 
    doSomething(someMessage); 
} 
+0

전적으로 동의합니다. 이것은 처음부터 허용되는 이유를 묻습니다 ...이 기능에는 몇 가지 이점이 있어야합니다. – InBetween

+0

@InBetween, 반대로 왜 허용되지 않습니까? 언어는'foreach (var x in foos) statement'를 허용합니다.'statement'는 코드의 적법한 문장입니다. 여기 성명서는 뭐니? '{codeblock; }'. 우리는'{codeblock; }'은 법적 진술이다. 그래서 질문은 왜 그것을 허용하지 않을 수도 있습니다,하지만 그것을 거부 할 수밖에없는 이유는 무엇입니까? 하지만 여기에 언어 사양이나 기타 리소스에 대한 내 의견을 언급하지 않았으므로 어쩌면이 말을 여러 단어로 간주 할 수 있습니다. –

0

예기치 않은 실수로 변수가 변경되는 것을 막을 수 있습니다. "범위 안에서"사용하면 값을 "실수로"변경하고 싶지 않을 때만 작업 할 수 있습니다.

3

범위 지정을 위해 인공 블록을 만드는 것은 종종 혼란 스럽습니다. 나는 그것을 결코 필요로하지 않았다.

필자가 필요로하는 부분이 있다면, 내 생각에 일반적으로 별도의 방법으로 리팩터링하는 것이 더 좋습니다.

(나는 그것의 말하는 게 아니에요주의 절대적으로 나쁜 난 그냥 당신이 그것을 가지고 정말 특별한 요구해야 할 것 같아요.)

관련 문제