루비 느낌 좋은 방법


나는 ActiveSupport에서 내가 생각하는 좋은 방법명을 발췌했다.
본고는 특히 활동 지원: 캐시 모듈에서 방법 이름을 발췌합니다.

이른바 디자인이란 이름만 정하면 거의 끝나지 않는다


제목 참조 소스 1
제목 참조 소스 2
상술한 바와 같이, 명칭은 프로그래밍에서 매우 중요한 공정이다.하지만 이름만 정하고 이름을 정하지 못하는 경우가 많다.
이 글에서 소개한 방법명이 이런 고민을 하는 사람을 도울 수 있다면 좋겠다.
궁금한 점이나 알 수 없는 점이 있으면 언제든지 연락하세요@ts_3156.

def read(key)


키를 지정하고 캐시에서 값을 읽는 방법입니다.
cache = Cache.new
cache.read('key')
# => 'value'
방법명, 특히 대외적으로 공개된 API의 방법명은 너무 간단하거나 길어도 이해하기 어렵다.적어도 캐시 분야에서는read라는 방법명에 대해 공감대가 있지만 다른 분야에서read라는 방법명을 사용할 때 주의해야 한다.
※ 이후 참조 코드는 Active Support의 사용 예시이거나 설명에 필요한 부분만 변경하여 발췌한 코드입니다.

def read_multi(*names)


여러 키를 지정하여 캐시에서 값을 읽는 방법여러 번 호출하는read보다 효율이 좋습니다.
cache.read_multi('key1', 'key2')
일본인들이 가능한 한 영어로 이름을 짓고 싶다면read_multiple(또는 multiple_read)라는 이름이지만,read_multi가 더 시원해요.

def read_entry(key)


read가 공개된 API일 때 다른 내부 값을 얻는 방법이 필요할 수 있습니다.이런 용도의 방법.
entry = read_entry('key')
unless entry.expired?
  entry.value
end
프로그래밍 언어가 어떻든지 간에 내부에서 사용하는 방법은 공개된 방법에 비해 이름이 비교적 길면 읽기 쉽다.

def read_multi_entries(*names)


read_multi 내부에서 사용하는 방법.
entries = read_multi_entries('key1', 'key2')
vaules = entries.select { |e| !e.expired? }.map(&:value)

def write(key, value)

  • def write_multi(entries)
  • def write_entry(key, entry)
  • def write_multi_entries(entries)
  • read*를 쓰는 방법입니다.
    cache.write('key')
    

    def fetch(key, &block)


    키를 지정하고 캐시에서 값을 읽지만 값이 없으면 새로 만들고 쓰는 방법입니다.
    cache.fetch('key') { 'new value' }
    
    Rails(중의 Active Support)가 이런 동작이기 때문에 fetch라는 방법을 만들 때 이것에 맞추면 여러 명의 개발 구성원 간의 곤혹이 줄어들 수 있다.
    그러나fetch라는 단어 자체가 추상적인 어감을 가지고 있기 때문에 어디에서든 사용하면 혼란을 일으킬 수 있다.

    def increment(name, amount = 1)

  • def decrement(name, amount = 1)
  • increment는 값을 1 증가시키고,decrement는 값을 1 감소시키는 방법입니다.
    cache.increment('key')
    
    방법명이라기보다는 매개 변수명이value가 아니라amount라는 것이 이해하기 쉬운 요점이기 때문에 소개했습니다.

    def modify_value(name, amount)


    increment와decrement 내부에서 사용하는 방법입니다.
    def increment(name, amount = 1)
      modify_value(name, amount)
    end
    
    def decrement(name, amount = 1)
      modify_value(name, -amount)
    end
    
    이런 말투를 살짝 바꿔보자.change가 아니라modify입니다. 이해하기 쉬운 요점입니다. 그래서 소개해 드리겠습니다.

    def delete(name)


    키를 지정하고 캐시에서 값을 삭제하는 방법입니다.
    cache.delete('key')
    
    유사한 이름은remove가 있습니다.적어도 루비의 코드와 고속 캐시 영역에서 delete는remove보다 더 많이 사용된다고 생각합니다.
    delete도read와write와 마찬가지로 내부에서 사용하는 방법명은delete_entry입니다.

    def clear


    캐시에서 모든 항목을 삭제하는 방법입니다.
    cache.clear
    
    뒤에 있는cleanup와 비슷하지만 좀 다르다.clear는 완전히 삭제할 그림인 것 같습니다.

    def cleanup


    캐시에서 만료된 항목만 삭제하는 방법
    cache.cleanup
    
    상술한clear와 달리 모두 삭제하는 것은 아닙니다.

    def prune


    너무 큰 캐시를 미리 지정한 크기로 줄이는 방법
    cache.prune
    
    cleanup와 비슷하지만 어감은 조금 다르다.prune를 실행하면 내부는cleanup이라고 불립니다.

    def serialize_entry

  • def deserialize_entry
  • 읽기 또는 쓰기 Entry 데이터를 직렬화 (= 저장에 적합한 형식) 로 변환하는 방법입니다.
    def read_entry(key)
      payload = @data.get(key)
      deserialize_entry(payload)
    end
    
    def write_entry(key, entry)
      payload = serialize_entry(entry)
      @data.set(key, payload)
      true
    end
    
    
    read는 read_entry, 그중 deserialize_entry라는 그림입니다.
    어느 정도에 제작된 라이브러리에서read는 공개 API를 실현할 수 있고,read 내부에서는 처리 A, 처리 B를 실현할 수 있다.이런 상황에서 A와 B의 이름을 처리하는 것은 항상 사람을 괴롭힌다.적어도 현금 분야에서는 앞으로 이런 고민은 없을 것 같다.

    def namespace_key


    사용자가 제공한 키에 접두사를 붙인 키를 만드는 방법.
    namespace_key('key', namespace: 'myapp')
    # => 'myapp:key'
    
    만든 라이브러리에서 사용자가 제공하는 키는 실제 캐시 키로 사용하기 전에 여러 번 변환됩니다.이럴 때 이런 프로그램이 있다면 이름 때문에 고민하지 않을 것이다.

    def expand_cache_key


    사용자가 제공한 여러 값을 하나의 값으로 확장하는 키를 생성하는 방법입니다.
    expand_cache_key([:xxx, :yyy])
    # => 'xxx/yyy'
    
    위의 namespace_키와 비슷하지만 용도는 미묘하게 다르다.이럴 때는 이름을 붙이기가 쉽지 않다.

    def retrieve_cache_key


    위 expand_cache_키에서 한층 더 사용하는 방법.
    expand_cache_키와 다른 것을 말로 설명하기 어렵다.자세한 내용은 구현을 참조하십시오.활동 지원은 다음과 같습니다.
    def retrieve_cache_key(key)
      case
      when key.respond_to?(:cache_key_with_version) then key.cache_key_with_version
      when key.respond_to?(:cache_key)              then key.cache_key
      when key.is_a?(Array)                         then key.map { |element| retrieve_cache_key(element) }.to_param
      when key.respond_to?(:to_a)                   then retrieve_cache_key(key.to_a)
      else                                               key.to_param
      end.to_s
    end
    
    retrieve는fetch의 뜻과 비슷한 단어로 공학 분야에서 흔히 볼 수 있는 단어입니다.

    def normalize_key


    캐시를 파일로 저장할 때 사용자가 제공한 키를 파일 경로로 변환하는 방법입니다.
    normalize_key('key')
    # => /aaa/bbb/ccc
    
    normalize는 한 단어로'규범화'를 의미한다.이 방법에 대해 파일 경로로 변환하는 것을normalize라고 하지만 주의해야 할 것은 이 단어는 다른 용도가 많다는 것이다.

    def file_path_key


    normalize_키와 반대로 파일 경로를 키로 바꾸는 방법입니다.
    file_path_key('/aaa/bbb/ccc')
    # => 'key'
    
    반변환이기 때문에 리버스 * 같은 이름이 가장 먼저 떠오르지만 이 이름이 더 똑똑하다.

    def bypass_local_cache


    local_당분간 캐치를 사용하지 않는 방법입니다.
    def bypass_local_cache
      use_temporary_local_cache(nil) { yield }
    end
    
    bypass는 우회라는 뜻의 단어입니다.어떤 방법을 돌기 위해서는bypass*라는 이름을 사용할 수 있습니다.
    bypass는 잘 생각나지 않는 단어이고 그에 맞는 용도가 있는 것 같아서 이번에 소개했습니다.

    def ensure_cache_path


    입력으로 제공된 경로 디렉터리를 만드는 방법입니다.
    def ensure_cache_path(path)
      FileUtils.makedirs(path) unless File.exist?(path)
    end
    
    "파일에 값을 기록합니다. 하지만 디렉터리가 없으면 만듭니다"라는 동작 한 가지 방법으로 하면 조금이지만 방법이 엉망진창이 됩니다.이럴 때 쓸 수 있는 방법.
    엔슈어가 잘 생각나지 않는 단어이고 용도도 그에 상응하기 때문에 이번에 소개했습니다.

    def failsafe


    '내부에서 발생한 이상은 내부rescue, 외부에서 이상이 발생했음을 표시하지 않는다'는 용도로 사용됩니다.
    간단한 설치는 다음과 같습니다.
    def write(key, value)
      failsafe do
        write_entry(...)
      end
    end
    
    def failsafe(returning: nil)
      yield
    rescue => e
      handle_exception e
      returning
    end
    
    failsafe라는 단어 자체가 자주 들리지만 방법명으로서 당연하다고 생각합니다.아이디어가 신선해서 이번에 소개했습니다.

    def rescue_error_with


    상술한failsafe와 같은 방법.
    간단한 설치는 다음과 같습니다.
    def write(key, value)
      rescue_error_with(false) do
        write_entry(...)
      end
    end
    
    def rescue_error_with(fallback)
      yield
    rescue => e
      fallback
    end
    
    방법명은 좀 길지만 외부에 공개하는 방법으로 고려하면 failsafe보다 용도를 이해하기 쉬운 좋은 이름일 수 있다.
    궁금한 점이나 알 수 없는 점이 있으면 언제든지 연락하세요@ts_3156.

    좋은 웹페이지 즐겨찾기