Tap, Tap, Tap
회사에서 phppresentation
라이브러리를 이용해, 사용자의 요청에 따라 ppt를 생성해주는 플러그인을 구현하던 중, 사수중 한분의 코드리뷰를 받았다.
리뷰 내용은 $shape
객체를 연속적으로 생성하여 사용하는 코드 부분에서 tap 헬퍼를 사용하여 가독성을 높여보는게 좋겠다는 내용이었다.
그렇다면, tap헬퍼란 무엇일까
<?php
function tap($value, $callback){
$callback($value);
return $value;
}
tap
헬퍼는 라라벨에서 제공하는 헬퍼 함수중에 하나로, 다름아닌 오트웰 아저씨 (라라벨 창작자)가 가장 좋아하는 헬퍼 함수중에 하나라고 한다.
기능은 심플하게, argument
하나와 callback 함수
하나를 넘겨 준 후 해당 argument로 하여금 콜백함수를 실행하게 해주는 것이다.
단순해보이는 기능이지만, 해당 헬퍼가 빛을 발할 때는 모델에서 체이닝이 끝도 없이 길어질 때이다.
$shape = $currentSlide->createRichTextShape();
$this->setShapeTransform($shape, 124, 128, 110, 19);
$shape->getActiveParagraph()
->getAlignment()
->setMarginLeft(0)
->setVertical(Alignment::VERTICAL_CENTER)
->setHorizontal(Alignment::HORIZONTAL_LEFT);
위 코드는 php
언어 환경에서 phpoffice/phppresentation
라이브러리를 통해 ppt를 생성하는 코드중 일부이다.
$shape
은 $currentSlide
위에 생성한 RichTextShape
인스턴스이다.
해당 shape
을 생성한 후에 관련되어 $shape
객체에 대한 상태 변화 메서드를 tap 헬퍼의 클로져 안에서 한번에 처리할 수 있다.
$shape = tap($currentSlide->createRichTextShape(),function(shape){
$this->setShapeTransform($shape, 124, 128, 110, 19);
$shape->getActiveParagraph()
->getAlignment()
->setMarginLeft(0)
->setVertical(Alignment::VERTICAL_CENTER)
->setHorizontal(Alignment::HORIZONTAL_LEFT);
});
이와 관련해서, laravel
의 창조자 테일러 오트웰(Taylor Otwell)이 쓴 글을 읽어보면, tap 헬퍼에 사용에 대해 더 자세하게 알 수 있다.
<?php
return tap($user)->update([
'name' => $name,
'age' => $age,
])
위와 같은 코드에서, Eloquent\Model
의 메서드 update의 return 타입은 bool type이지만, tap
헬퍼를 사용함으로써 업데이트된 $user
모델을 return 받을 수 있다.
정리
정리해보면, laravel tap 헬퍼의 장점은 아래와 같다고 할 수 있다.
- 특정 객체와 관련된 처리를 한 코드 블록안에 모을 수 있기 때문에 코드 가독성이 올라간다.
- 객체의 메서드의 return 타입과 관련없이, 메서드 체이닝을 통해 변경된 객체를 return 받을 수 있다.
참고: https://medium.com/@taylorotwell/tap-tap-tap-1fc6fc1f93a6
'개발 > 라라벨' 카테고리의 다른 글
eloquent 모델에 keyType 지정하지 않을 시, relation에 접근할 수 없는 이슈 (1) | 2023.10.17 |
---|---|
laravel Request life-cycle (생명주기) dd로 따라가보기 (2) (0) | 2023.09.11 |
laravel Request life-cycle (생명주기) dd로 따라가보기 (1) (0) | 2023.09.05 |
Eloquent Collection과 Support Collection 은 뭐가 다를까? (0) | 2023.09.01 |
laravel Notification queue 적용시에 모델에 따라서 memory size exhausted 되는 이슈 해결기 (0) | 2023.08.29 |