회사에서 최근 품질관리를 위하여 루보콥을 사용하고 있다.
어떻게 사용하고 있냐 하면은, git을 커밋할 때 마다 루보콥이 돌고 remote 브랜치에 push를 할 때면 RSPEC이 돈다.
그래서 commit 할 때, Rubocop과 Rspec이 도는 것을 이번 주에 처음 해보았다.
RSPEC이 REMOTE push 때마다 매번 도는건 여전히 귀찮지만 루보콥이 도는건 꽤 만족한다. 루보콥에서 걸린 것들을 고쳐나가면서, 루비 스타일 가이드를 읽게되니 기존의 소스코드가 아닌 다른 방법으로 루비를 배워가는 기분이여서 좋다 ㅎㅁㅎ
그러면서 알게된 String Class와 관련된 루비 스타일 가이드를 정리해보고자 한다.
1. to_s를 쓰지 말라! [link]
"#{object}"
이런식으로 "#{ }" String 형태 안에 값을 넣을 경우, 굳이 to_s로 객체를 String으로 변환해주지 않아도 된다. 왜냐하면 " " 함수 안에서 자동으로 to_s 기능을 주입시켜 준다고 한다!
# 그니까... 만약 아래처럼 해시값을 ""안에 찍어서 보고 싶은 경우, 굳이 to_s를 하지 않아도 에러가 안난다는 것!
hash_object = {a: 1, b:2}
puts "#{hash_object}"
2. += 보다는 <<를 써라 !
좀 큰 구문들을 저장할 때에는 String의 +를 사용하기 보다는 String의 << 를 사용하는 것을 권장한다고 한다. 여기서 <<로 String 객체를 다루면 한 객체를 계속 바꾸는 거여서 (Concatenation mutates the string instance)! 새로운 String 객체를 생성하는 String의 +보다 더 빠르다!
3. String#gsub += 보다 tr 또는 sub 을 사용하라!
gsub보다는 sub이나 tr을 쓰는게 더 빠르다고 한다.
tr은 단일 character 값을 바꿀 때 사용한다! abc에서 a만 바꾸고 싶을 때!
sub은 regex에 매칭되는 전체 값을 바꾸는게 아니라 첫번째 매칭되는 값만 바꾸고 싶을 때 사용!
gsub은 regex에 매칭되는 모든 값들을 바꿀 때 사용!
뭐 결론은... 다 매칭되는지 보지 않고 첫번째만 매칭되는거 보고 로직을 빠져나가는 sub이 gsub보다 낫다는 건감..?
gsub vs sub
gsub : regex에 맞는 모든 값들을 변경한다.
value = 'abc abc'
value.gsub('abc','---')
# retrun 되는 값 => '--- ---'
sub : regex에 맞는 가장 첫번째 값만 변경한다.
value = 'abc abc'
value.gsub('abc','---')
# retrun 되는 값 => '--- abc'
'소프트웨어-이야기 > 프로그래밍 언어와 프레임워크' 카테고리의 다른 글
리팩토링:루비에디션 (0) | 2016.12.09 |
---|---|
[Ruby]nil? VS blank? VS empty? VS any? VS present? (0) | 2016.07.07 |
[ROR]Asset Pipeline / 자바스크립트, CSS 압축 (0) | 2016.01.01 |
[ROR]루비온레일즈를 설치할 때, 왜 node.js를 설치해야할까? (0) | 2016.01.01 |
[RAILS]before_filter에 넘어오는 파라미터에 따라 필터 적용 여부 결정하기 (0) | 2015.12.26 |