Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(utils): clamp 추가 #603

Merged
merged 6 commits into from
Dec 1, 2024
Merged

Conversation

metacode22
Copy link
Contributor

@metacode22 metacode22 commented Nov 24, 2024

Overview

입력된 값이 최소값보다 작으면 최소값을, 최대값보다 크면 최대값을 반환합니다. 값이 범위 내에 있다면 그대로 반환합니다.

PR Checklist

  • All tests pass.
  • All type checks pass.
  • I have read the Contributing Guide document.
    Contributing Guide



매번 잘 참고하고 있습니다!

궁금한 점

changeset을 해주지 않아도 merge 될 때 알아서 버저닝이 되나요? 아니면 changeset 작업이 필요한가요? changeset-bot이 보여서요!

@metacode22 metacode22 requested a review from ssi02014 as a code owner November 24, 2024 12:58
Copy link

changeset-bot bot commented Nov 24, 2024

🦋 Changeset detected

Latest commit: 8ac9adc

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@modern-kit/utils Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@ssi02014
Copy link
Contributor

@metacode22 modern-kit에 관심을 갖고 작업해주셔서 감사드립니다. 내일중으로 확인 후에 코멘트가 필요한 부분이 있다면 코멘트 남기도록 하겠습니다!👍👍

changeset 은 제가 리뷰 후에 추가하고 있습니다!😄

@metacode22
Copy link
Contributor Author

@metacode22 modern-kit에 관심을 갖고 작업해주셔서 감사드립니다. 내일중으로 확인 후에 코멘트가 필요한 부분이 있다면 코멘트 남기도록 하겠습니다!👍👍

changeset 은 제가 리뷰 후에 추가하고 있습니다!😄

오옷! 넵!

리뷰 해주시면 열띠미 반영해보겠습니다!🫡

감사합니다!😆

@ssi02014 ssi02014 added feature 새로운 기능 추가 @modern-kit/react @modern-kit/react labels Nov 25, 2024
Comment on lines 1 to 3
export function clamp(value: number, min: number, max: number): number {
return Math.min(Math.max(value, min), max);
}
Copy link
Contributor

@ssi02014 ssi02014 Nov 25, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

export function clamp(value: number, max: number): number

@metacode22 위와 같이 min이 없고 max만 존재하는 케이스도 지원하면 좋을 것 같습니다 :)
lodash, es-toolkit 모두 위 케이스를 지원합니다.

// lodash
clamp(number: number, lower: number, upper: number): number;
clamp(number: number, upper: number): number;
// es-toolkit
export function clamp(value: number, maximum: number): number;
export function clamp(value: number, minimum: number, maximum: number): number;

추가적으로 jsdoc을 추가합니다.

제안 코드

/**
 * @description `주어진 값`을 `최대값으로 제한`합니다.
 * 
 * @param {number} value - 제한할 숫자
 * @param {number} max - 최대 범위
 * @returns {number} 지정된 범위 내로 제한된 숫자
 * 
 * @example
 * clamp(3, 5); // 3
 * clamp(10, 6); // 6
 */
export function clamp(value: number, max: number): number

/**
 * @description `주어진 값`을 `최소값과 최대값 사이로 제한`합니다.
 * 
 * @param {number} value - 제한할 숫자
 * @param {number} min - 최소 범위
 * @param {number} max - 최대 범위
 * @returns {number} 지정된 범위 내로 제한된 숫자
 * 
 * @example
 * clamp(7, 0, 10); // 7
 * clamp(10, 0, 5); // 5
 * clamp(-5, 0, 10); // 0
 */
export function clamp(value: number, min: number, max?: number): number {
  if (isNil(max)) {
    return Math.min(value, min);
  }
  return Math.min(Math.max(value, min), max);
}

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 제가 일이 많았어서 이제 보았네요! 말씀해주신 부분들 이번 주 내에 추가해서 다시 리뷰 요청드리겠습니다~! 😀

@ssi02014
Copy link
Contributor

ssi02014 commented Nov 25, 2024

추가적으로 benchmark 파일도 추가되면 좋을 것 같습니다. (비교는 lodash의 clamp) 타 유틸 함수의 .bench.ts 파일을 참고해주세요 :)

  • ex. omit.bench.ts
  • 실행 방법 예시: 터미널에서 utils 폴더 이동 후 yarn test:bench omit.bench.ts 실행

benchmark 파일이 추가됨에 따라 .md docs도 수정 필요(Benchmark 세션 추가)

  • ex. omit.md

@metacode22 metacode22 requested a review from ssi02014 November 30, 2024 06:55
@metacode22
Copy link
Contributor Author

추가적으로 benchmark 파일도 추가되면 좋을 것 같습니다. (비교는 lodash의 clamp) 타 유틸 함수의 .bench.ts 파일을 참고해주세요 :)

  • ex. omit.bench.ts
  • 실행 방법 예시: 터미널에서 utils 폴더 이동 후 yarn test:bench omit.bench.ts 실행

benchmark 파일이 추가됨에 따라 .md docs도 수정 필요(Benchmark 세션 추가)

  • ex. omit.md

말씀해주신 것들 바탕으로 다음과 같은 작업들을 진행했습니다.

  • min 없이 value, max만 사용하는 경우를 대응하기 위한 기능 추가, 이에 따른 함수 오버로딩, jsdoc 추가 a4f4f4a
  • lodash의 clamp와 비교한 benchmark 추가 37130a8
  • 이에 따라 clamp 문서 수정 d57573d

vitest에 benchmark라는 기능이 있었군요! 덕분에 알게 되었습니다. 감사합니다!

또 부족한 부분 말씀해주시면 바로 반영해보겠습니다!

Copy link
Contributor

@ssi02014 ssi02014 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🤗 modern-kit에 관심 갖고 기여해주셔서 다시 한번 감사의 말씀 드립니다

Copy link

codecov bot commented Dec 1, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 98.37%. Comparing base (33cf068) to head (8ac9adc).
Report is 104 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main     #603      +/-   ##
==========================================
+ Coverage   97.41%   98.37%   +0.96%     
==========================================
  Files         164      172       +8     
  Lines        1470     1542      +72     
  Branches      361      396      +35     
==========================================
+ Hits         1432     1517      +85     
+ Misses         34       23      -11     
+ Partials        4        2       -2     
Components Coverage Δ
@modern-kit/react 97.27% <ø> (+2.05%) ⬆️
@modern-kit/utils 99.59% <ø> (-0.41%) ⬇️

@ssi02014 ssi02014 merged commit 7aa51ec into modern-agile-team:main Dec 1, 2024
3 checks passed
@github-actions github-actions bot mentioned this pull request Dec 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature 새로운 기능 추가 @modern-kit/react @modern-kit/react
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants