반응형









//  안녕하세요~ 에르의 생각발전소입니다 :)

// 이번 시간에 다룰 주제는 switch fallthrough 입니다.

// 언어의 switch구문과 swift switch구문을 비교해보면 가지 차이점을 확인하실수 있습니다.

// switch 구문에는 패턴이 일치하는 case블록을 싱행하는 대신, 그다음 case블록으로 실행 흐름을

// 전달하는 문법이 있습니다.

// 이를 Fall Through 라고 합니다.

// 특히 명시해주지않아도 적용이 되기 때문에 암시적인 Fall Through 부릅니다! (하지만 스위프트에서 지원하지않습니다.)

/* 

 switch 비교 대상 {

 

 case  비교패턴1:

    실행구문

 

 case 비교패턴2:

    실행구문

 

 case 비교패턴3:

  실행구문

 

 default :

 실행구문

 }

 저번에 다뤘던 스위치구문의 문법입니다!

 비교조건은 본인의 마음에 따라 추가시킬 있으며, default 모든 변수의 case 담당합니다.

 

 */

let sampleChar : Character = "a"


switch sampleChar {


case "a":

    

case "A":

        print("글자는 A입니다.")


default :

    print("일치하는 글자가 없습니다.")

}

// 유감이게도 에러가 발생했습니다. 

// 왜냐하면 스위프트의 스위치구문에서 case 블록은 공백이 되어선 안됩니다.

// 더군다나, 암시적인 fallthrough 지원하지도 않기때문에 에러가 발생했네요.

// fallthrough 실행 흐름이 전달된 비교 블록은 패턴 일치 여부에 상관없이 실행 블록을 처리합니다.

// 하지만 스위프트에는 암시적인 fallthrough 대신 명시적인 fallthrough 방법을 채택하였으며, case 블록이 비어 있어선 안됩니다.!

let sampleCharacter : Character = "a"


switch sampleChar {


case "a" :

    fallthrough

    

case"A":

    print("the character is A")


default :

    print("there is no matched character. ")

}


// 결과는 case "A" 되었습니다원래의 결과는 case "a" 되어야맞지만,

// case "a" 실행되어야할 블록을 fallthrough 이용하여, 다음 블록인 case "A" 토스 해준것이죠!



//스위위프트에서 switch 구문은 하나의 ㅇ리치된 비교패턴만 실행하는 특징과 함께, 어떤 경우라도 반드시 하나의 비교패턴은 일치해야한다는 제약이 있습니다.

// 비교 대상이 비교패턴 어느것과도 일치하지 않아 분기문 내의 어떤 블록도 실행되지 못하는 경우에는 switch구문의 fall이라 하는데, 

// 이때 switch구문은 완전한 비교 패턴을 구성하지 못한것으로 간주합니다.



반응형
by 발전소장 에르 :) 2016. 7. 23. 15:01
반응형


// 반갑습니다, 에르의 생각발전소입니다 :)

// 이번 시간 다뤄볼 주제는 switch구문입니다!














 

/* switch 구문

 switch 비교 대상 {

                case pattern 1 :

                            statement   

                case pattern 2 :

                            statement

                default :   

                            statement

 }


다양한 가능성이 있는 여러개의 조건 비교에 효율적으로 사용하기위해

 if~ else if 구문 보다는 swift구문이 적합하다고 있습니다.

 case pattern 마다 조건을 제시하고 default값에는 모든 변수를 대변할 구문을 실행합니다.

 기존의 C언어나 자바 많은 언어에도  switch구문이 있지만, 스위프트의 switch구문과의 차이점이 있습니다.

 스위프트의 switch구문은 일치하는 패턴이 있을 경우 해당 패턴과 일치하는 블록의 실행 코드를 처리한 전체 분기문을 종료하고

 다음 구문을 진행합니다.

 뒤에 일치하는 패턴이 있더라도, 처음 일치하는 case구문만 실행합니다.

 그리고 기존의 C 자바는 추가적으로 일치하는 case구문이 있더라고 실행됩니다.

 break구문이 따로 있어야만 멈추는게 기존 언어들의 특징이지요.

 이부분에서는 스위프트가 진화했다고도 있을 같습니다.

 

 

var con = 1

switch con {

case 1 :

    print("해당 값은 1 입니다.")

case 2 :

    print("해당 값은 2 입니다.")

case 3 :

    print("해당 값은 3 입니다.")

default :

    print("어느 조건과도 일치하지 않습니다.")

}


// break구문에 대해서 말씀드렸는데

// 스위프트에서도 타언어처럼 사용할 있는 장치가 있습니다.

// 바로 fallthrough 기능입니다.

// fallthrough 삽입하면, 해당 케이스는 무시하고 다음 케이스로 이동합니다.

// 아래 예제를 보시지요!


let test : Character = "L"

switch test {

case "l" :

    print("글자는 l입니다.")

case "L":

    fallthrough

default :

print("일치하는 글자가 없슴당")

}


// case "L" 해당되는 값임에도 fallthrough 붙어있음으로써, default값이 실행되었습니다.

// 명시적으로 구분해서, 스위치구문을 탄탄히 만들 있습니다.

//  위 예제들 실행시 나오는 값들 사진입니다 :)

반응형
by 발전소장 에르 :) 2016. 6. 1. 08:00
| 1 |