대안이 유효하지 않을 경우: Ruby 사례 연구
너 루비 배우고 있어.대부분의 다른 언어와 마찬가지로, 컴파일러 그룹을 사용해야 한다는 것을 알았습니다.
["a", "b", "c"]
쿨하다어느 날, 라이브러리 코드를 읽을 때 이상한 코드를 만나게 될 것이다. 예를 들어 %w(a b c)
.곤혹스러워, 네가 그것을 검색했지만, 그것은 여전히 하나의 수조라는 것을 발견했다.["a", "b", "c"]
와 같다.그것이 왜 존재하는지 약간 곤혹스럽지만 괜찮아요.며칠 후, 당신은 다시
%w
구조를 만났지만, 이번에는 문자열입니다: %w"a b c"
.수수께끼 놀이를 할 때가 되었다.이것은 ["a b c"]
,["a", "b", "c"]
입니까 아니면 다른 무엇을 말합니까?사실이 증명하듯이 그것은 이전과 같다.이 예에서는 %w
가 문자열을 분할합니다.곧 며칠 안에 너는 다시 만날 것이다
%w
. 그러나 지금은 {}
가 아니라()
. %w{a b c}
.너는 아마도 같은 일일 것이다. 자세히 검사해라. 네.너는 여기에 문제가 있다고 생각하니?한 가지 일을 하는 데 너무 많은 다른 방법이 있을 수 있다.
throw
이상raise
vsfail
).This Stack Overflow thread는 기본적으로 어떤 구조를 사용하느냐에 대한 논쟁이다. 비록 이 두 구조의 뜻이 완전히 같지만.(너는 의미가 다르다고 논쟁할 수 있지만, 이것은 허구이다.)%W[a b c] #=> ["a", "b", "c"]
%i[a b c] #=> [:a, :b, :c]
%I[a b c] #=> [:a, :b, :c]
그럼 현악은요?너는 그것이 단지 단인호/쌍인호와 <<<HEREDOC
문법이라고 생각하니?%3Cp+align%3D%22center%22%3E%0D%0A%09%3simg+src%3D%22https%3A%2F%2Fmedia1.테너com%2Fimages%2F32420a44eda218c684afd25348afe7ce%2Ftenor.gif%3Fitemid%3D4719446%22%3E%0D%0A%3C%2Fp%3E%0D%0A
%q[This is a string, not an array]
%Q{This too}
%(Yep, and this!)
?a # => a string with a single-character
더 좋은 것은 구분자가 []
, {}
또는 ()
일 필요가 없다는 것이다.너는 어떤 기호를 사용할 수 있다.그래서:%w"This is an array" # => ["This", "is", "an", "array"]
%q@This is a string@ #=> "This is a string"
그것들은 모두 신비롭다. 이것은 도움이 되지 않을 뿐만 아니라, 문서를 찾아보지 않으면 조작원이 무엇을 하는지 알 수 없다.하지만 다른 용도로 쓰인다!
현재, 당신은 이러한 수조 방법 중의 하나하나가 약간 다른 행위를 하고 있다고 말할 수 있는데, 이것은 그것들의 합리성을 증명한다.응, 우리 예를 들자.
%w{a b c}
와 ["a", "b", "c"]
는 같지만 따옴표가 없다.%W
는 플러그인을 지원하기 때문에 실행할 수 있음%W{John #{name}}
과 가져올 수 있음["John", "Peter"]
.나는 이것이 무슨 필요가 있는지 모르겠다. 왜냐하면 너는 똑같이 쉽게 쓸 수 있기 때문이다. ["John", name]
또는 "John #{name}".split
.%i
와 %I
는 기호수 그룹%I
에 플러그인을 지원하지만, 마찬가지로 직접 작성할 수 있습니다 [:a, :b, :c]
.그렇게 어렵지도 않고 시끄럽지도 않아요.%q{He said, "Oh shit."}
와 "He said, \"Oh shit.\"
.나는 그 중 일부는 간혹 좋은 것들이라는 것에 동의한다.어떤 것은 심지어 매우 멋있다.그러나 나는 그것들이 반드시 가치가 있다고 생각하지 않는다.루비의 이념은'개발자 생산력'이다. 나는 이 이념에 전적으로 찬성한다.그러나 너무 많은 옵션을 제공하는 것은 이와 배치될 수 있다.
사실 이런 차이는 혼란을 심화시킬 수 있다.예를 들어,
"hello #{name}".split
및 %w"hello #{name}"
는 따옴표가 있는 문자열을 사용하는 것처럼 보일지라도 같은 결과를 내지 않습니다.name = "Peter"
"hello #{name}".split #=> ["hello", "Peter"]
%w"hello #{name}" #=> ["hello", "\#{name}"]
이것들은 단지 몇 개의 장면일 뿐이지만 루비에는 manymoreexamples와 같은 장면이 있다.물론 루비는 유일하게 불필요한 대체품이 있는 언어는 아니지만, 항상 특성으로 여겨지는 경축의 언어이다. 솔직히 말해서, 나는 모른다.나도 한 방법에 너무 많은 별명을 제공하는 라이브러리에서 이런 상황이 발생하여 약간의 혼란을 초래하는 것을 본 적이 있다.때로는 적으면 많다.때때로 사용 가능한 옵션을 제한하고 일치성을 강화함으로써 사용자에게 더 좋은 전체적인 체험을 제공할 수 있다🙄). 만약 당신이 대체 방안을 제공하려고 한다면, 그것을 합리적인 범위 내에서 제한하고, 그 용례와 장점을 명백히 알 수 있도록 해라.
Reference
이 문제에 관하여(대안이 유효하지 않을 경우: Ruby 사례 연구), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/shalvah/when-alternatives-are-unhelpful-a-ruby-case-study-2m85텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)