Как и все остальные, я изучил инкапсуляцию так, как она написана по всему Интернету, и все бабы по программированию объяснили, но когда вы в последний раз использовали ее?

Я хотел набросать это, чтобы поделиться с вами всей недооцененной техникой инкапсуляции, с которой я столкнулся, делая обзор кода одного из моих коллег. Я был поражен его мыслительным процессом и тем, как он его реализовал.

Инкапсуляции не ограничивались только классами и этими внутренними методами, но почти всем. Я выбрал один классический пример его использования, чтобы вы могли использовать эту технику в своих реализациях в следующий раз, когда будете писать код.

Есть этот фрагмент кода, где есть условие if для получения логического значения, на первый взгляд мы не понимаем, какие именно условия проверяются, и отладка сравнительно сложна. хотя кажется, что в этом коде нет ничего плохого, его можно улучшить.

  return (carDetails &&
    carDetails.location === 'XYZ' &&
    carDetails.insides.specifications.find(detail => detail.cylinders === '2').segment === 'superLuxury' &&
    carDetails.availability.country.includes('usa').pincode == '5904504' 
  )

код довольно прост, он проверяет различные атрибуты автомобиля, но то, как он закодирован и поддерживает его, довольно сложно. может быть не в этот момент времени, но если будут добавлены дополнительные условия. Давайте посмотрим, насколько хорошо это можно упростить или применить технику инкапсуляции для написания этого кода в более презентабельном виде.

return (isEmpty(carDetails) &&
        isLocationBelongTo(carDetails, 'XYZ') && 
        IsTwinCylinderAndSegmentMatched(carDetails, 'superLuxury') &&
        IsAvailableInCityWithPincode(carDetails, 'usa', '5904504')
  )

Идея этой техники заключается не в том, чтобы создавать несколько методов для каждого условия, а в том, чтобы написать более разумный и понятный код, потому что, в конце концов, именно человек пытается понять ваш код, а не машина.