Go 언어의 블록 및 역할 영역

5896 단어 Gotech
Go 언어는 네모난 블록과 범위라는 두 가지 비슷한 개념을 가지고 있다.
"네모난 블록과 오실로그래프는 어떤 차이가 있습니까?"나는 이런 의문에 대답하고 싶다.

블록은 소스 코드의 "블록"을 가리킨다


블록은 소스 코드가 단위로 요약된 블록입니다.
가장 알기 쉬운 예는 기호{...}에서 정리한 문장조.
{ 
   var int x = 1
   println(x)
}
이것은'명확한 블록'이라고 불린다.
'명시된 네모'외에'기본 네모'도 있다.
다음은 5가지 기본 블록입니다.
  • 일반 블록: 모든 Go의 소스 코드 외부를 둘러싸는 가상 블록
  • 패키지 블록: 하나의 패키지에 모든 소스 코드를 포함하는 블록
  • 파일 블록: 파일의 모든 소스 코드를 포함하는 블록
  • if, for, switch 블록:if, for, swtich 문장 자체가 블록이 됨
  • switch,select의 블록:case 섹션과default 섹션 자체가 블록이 됨
  • 블록은 중첩될 수 있습니다.

    if, for, switch 블록


    if, for, switch 블록에서 주의해야 할 것은 {...}블록뿐만 아니라 if|for|switch부터 }까지 전체적으로 은식 블록이다.
    // if から } までが1個のブロック
    if x := 1; x == 1 {
        // { から } まで はさらにもう1個のブロック
        var x int
        println(x) // => 0
    }
    
    본 예에서 먼저 1개if ... {...}의 스텔스 블록이 있고 그 안쪽에 명확한 블록{...}이 있다.(내부에서 x가 증거라고 재차 성명할 수 있다)

    노트


    swtich 문장의case절과default절에서는 쓰지 않아도 블록을 구성합니다.
    	switch "foo" {
    	case "a":
    		var x int = 1
    		println(x)
    	case "b":
    		var x float64 = 2.0
    		println(x)
    	default:
    		var x string = "3"
    		println(x)
    	}
    
    이 코드의 모든case절과default절은 단독 블록이기 때문에 표지부{...}를 단독으로 설명할 수 있다.

    블록 = 분포 지도


    현실 세계에 비유하면'일본','지바현','포안시'처럼 지도상의 분계선에 둘러싸인 구역이 비슷하다.
    지구(포장) 바깥에는 우주(우주) 같은 느낌이 있다.

    작용역은 어떤 표지부호가 관련된 범위를 선포하는 것을 가리킨다


    작용역은 특정한 표지부x 또는 x의 성명에 착안할 때 이 선언이 효력을 가진 범위를 가리킨다.
    블록과 유사하지만 반드시 블록 경계와 같지는 않습니다.
    예를 들어 로컬 변수를 선언할 때 그 효력은'선언 후 블록 끝까지'로 정의된다.
        var x string
        {
            x = "hello"
            println(x) // => "hello"  
            // --- ここまでの x は 外側で宣言された x
    	
            var x int // --- ここからブロックの末尾まで、 x は int
            println(x) // => 0
        }
        println(x) // => "hello"  
    
    중간Foo선언의 효과는 위의 행에 적용되지 않는다.var x intx = "hello"은 외측 블록에서 선언한 x를 가리킨다.(외부에 선언되지 않은 경우 컴파일 오류)

    역할 영역 = 등장인물 x의 마법 유효범위


    예를 들어 어떤 마법사x가 마법을 사용하는 범위(범위)는 천엽현(블록)의 남쪽 절반에 불과하다.

    네모난 블록과 작용역의 개념층이 다르다


    블록이 소스 코드의 문구, 장소적인 물리적 층(소스 코드가 여기서 여기까지 등) 근처의 층이라면 범위는 식별자 선언의 내용(누가 누구의 영향을 받았는지 등)을 깊이 고려해 고위층의 말로 이해할 수 있다고 생각한다.

    참고 자료


    https://golang.org/ref/spec#Blocks
    https://golang.org/ref/spec#Declarations_and_scope

    좋은 웹페이지 즐겨찾기