대안이 유효하지 않을 경우: Ruby 사례 연구

5416 단어
(소프트웨어와 비소프트웨어 제품의) 디자인에서 몇 가지 대체 방안을 제공하는 것이 좋습니까?이 장면을 봅시다.
너 루비 배우고 있어.대부분의 다른 언어와 마찬가지로, 컴파일러 그룹을 사용해야 한다는 것을 알았습니다. ["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이상raisevsfail).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와 같은 장면이 있다.물론 루비는 유일하게 불필요한 대체품이 있는 언어는 아니지만, 항상 특성으로 여겨지는 경축의 언어이다. 솔직히 말해서, 나는 모른다.나도 한 방법에 너무 많은 별명을 제공하는 라이브러리에서 이런 상황이 발생하여 약간의 혼란을 초래하는 것을 본 적이 있다.
    때로는 적으면 많다.때때로 사용 가능한 옵션을 제한하고 일치성을 강화함으로써 사용자에게 더 좋은 전체적인 체험을 제공할 수 있다🙄). 만약 당신이 대체 방안을 제공하려고 한다면, 그것을 합리적인 범위 내에서 제한하고, 그 용례와 장점을 명백히 알 수 있도록 해라.

    좋은 웹페이지 즐겨찾기