프로그래밍/Ruby

Ruby 프로그래밍 - 4. 조건문

seungdols 2015. 2. 19. 14:35

Boolean


비교에서 True 혹은 False를 반환하는 것을 보았을 것이다. 이 두가지는 데이터 형(Type)중 하나인 'Boolean'타입이다.

불린 타입은 값을 두가지만 가진다. 그 외의 값은 가질 수 없다.



조건문?


주어진 조건에 따라 실행하고 하지않고를 결정하는 문법이다.


if


if boolean

<수행할 문장>

end 이러한 형식으로 작성하면 된다.


irb(main):034:0* if true
irb(main):035:1> puts 'seungdols : true'
irb(main):036:1> end
seungdols : true
=> nil
irb(main):037:0> if false
irb(main):038:1> puts 'seungdols : true'
irb(main):039:1> end
=> nil
irb(main):040:0> if true
irb(main):041:1> puts 1
irb(main):042:1> puts 2
irb(main):043:1> puts 3
irb(main):044:1> end
1
2
3
=> nil
irb(main):045:0> if true
irb(main):046:1> puts 1
irb(main):047:1> end
1
=> nil

else


if문과 같이 쓰게 되며, if문의 조건이 거짓일때만 else문에도 기회가 온다.

if boolean

<수행할 문장>

else

<수행할 문장>

end


irb(main):050:0> if true
irb(main):051:1> puts 1
irb(main):052:1> else
irb(main):053:1* pust 2
irb(main):054:1> end
1
=> nil
irb(main):055:0> if false
irb(main):056:1> puts 1
irb(main):057:1> else
irb(main):058:1* puts 2
irb(main):059:1> end
2
=> nil

elsif


if boolean

<수행할 문장>

elsif boolean

<수행 할 문장>

else

<수행할 문장>

end

위와 같은 형식으로 오게 된다. 그럼 루비의 경우 인터프리터가 한 줄 한 줄 해석하며 내용을 저장하고 end와 함께 참인 문장만 실행한다.

irb(main):069:0> if false
irb(main):070:1> puts 1
irb(main):071:1> elsif true
irb(main):072:1> puts 2
irb(main):073:1> elsif true
irb(main):074:1> puts 3
irb(main):075:1> else
irb(main):076:1* puts 4
irb(main):077:1> end
2
=> nil


unless


이 경우 거짓일 때만 조건이 실행하게 된다.

모습은 유사하다.


irb(main):078:0> unless true
irb(main):079:1> puts 'true'
irb(main):080:1> end
=> nil
irb(main):081:0> unless true
irb(main):082:1> puts 'false'
irb(main):083:1> end
=> nil
irb(main):084:0> unless false
irb(main):085:1> puts 'false'
irb(main):086:1> end
false
=> nil


간결화


코드라인을 줄이는데 기여를 하게 된다. 가장 중요한 것은 코드 가독성이다.


irb(main):087:0> if true
irb(main):088:1> puts 'true'
irb(main):089:1> end
true
=> nil
irb(main):090:0> puts 'true' if true
true
=> nil

중첩?


조건문의 중첩이 가능하다!


irb(main):091:0> puts 'input your ID:'
input your ID:
=> nil
irb(main):092:0> id = gets.chomp
seungdols
=> "seungdols"
irb(main):093:0> if id == 'seungdols'
irb(main):094:1> puts 'right'
irb(main):095:1> else
irb(main):096:1* puts 'wrong'
irb(main):097:1> end
right
=> nil
irb(main):098:0> puts 'input id'
input id
=> nil
irb(main):099:0> id = gets.chomp
seungdols
=> "seungdols"
irb(main):100:0> if id == 'seungdols'
irb(main):101:1> puts 'input pass'
irb(main):102:1> password = gets.chomp
irb(main):103:1> if password == '1111'
irb(main):104:2> puts 'right'
irb(main):105:2> else
irb(main):106:2* print 'wrong'
irb(main):107:2> end
irb(main):108:1> end
input pass
1111
right
=> nil

논리연산자


조건에 대한 논리연산을 추가해보자.

쉽게 생각하면 우리는 지금 '이것'만 물어보고 있었다. 이제는 '이것' '저것'을 같이 물어볼 수 있게 된다.


And


곱셈이라고 생각해보자 true : 1 false : 0 1*1 = 1 1*0= 0

즉 0이면 실행하지 않게 된다.


irb(main):109:0> if true and true
irb(main):110:1> print 1
irb(main):111:1> end
1=> nil
irb(main):112:0> if true and false
irb(main):113:1> print 2
irb(main):114:1> end
=> nil

Or


합이라고 생각하자.

조건의 true가 하나라도 있으면 1이다.

그러므로 실행하게 된다. 그러나 하나도 true가 없으면 실행하지 않는다.


irb(main):115:0> if true or true
irb(main):116:1> print 2
irb(main):117:1> end
2=> nil
irb(main):118:0> if false or true
irb(main):119:1> print 3
irb(main):120:1> end
3=> nil

Not


True/false를 뒤 바꾼다고 할 수 있다. 뭐 이를테면 토글시킨다라고도 말 할 수 있을거 같다.

말은  중요하지 않다. 코드로 보자.

irb(main):121:0> if !true and !true
irb(main):122:1> print 3
irb(main):123:1> end
=> nil
irb(main):124:0> if !true and !false
irb(main):125:1> print 3
irb(main):126:1> end
=> nil
irb(main):127:0>

반응형