개념에서 불필요한 복잡한 함수를 작성하다

9178 단어

무엇이 개념입니까?


만약 당신이 들어보지 못했다면 Notion 그것은 일체형 작업 구역이거나 저는 더 좋은 EverNote라고 부르는 것을 좋아합니다.이 프로그램은 본질적으로 기능이 완비된 가격 인하 편집기로서 표준 가격 인하와 Latex를 사용하여 블록에서 모든 페이지를 편집할 수 있습니다.이 밖에 Concept는 Unsplash의 무료 이미지, Figma의 실체 모델, Google 드라이브의 파일, 심지어 CodePen의 코드까지 통합했다.
자, 이 일에 대한 칭찬은 이미 충분한데, 이것은 프로그래밍과 무슨 관계가 있습니까?

개념 속의 공식


프로그래밍과 관련된 일부 개념은 "Formulas" 이라는 검색 언어를 사용하여 새로운 스프레드시트 열을 만들 수 있다는 것이다.SQL 또는 Excel 함수를 사용한 적이 있다면 익숙합니다.공식은 사용자가 데이터베이스에 있는 다른 필드를 바탕으로 단일 출력을 정의할 수 있도록 하고 관계 대수의 관계와 매우 비슷하다.

문제


그래서 저는 현재 개념을 이용하여 블로그 게시물을 작성하고 정렬하고 있지만 a cool spreadsheet that uses Notion as a subscription tracker를 만났습니다.나는 "와, 나는 구독을 사용하는데, 나는 반드시 총비용을 병렬적으로 열거해야 한다."라고 생각한다.

따라서, 나는 그것을 나의 개념 작업 영역 (당신의 계정의 줄말) 으로 복사하지만, 갱신 날짜 필드는 반드시 수동으로 입력해야 한다는 것을 깨달았다.나는 "모든 구독이 매달 또는 매년 같은 날에 중복된다면 왜 구독 시작 날짜를 통해 자동으로 계산할 수 없습니까?"라고 생각했다.
그래서 나는 한 가지 일을 자동으로 완성하기 위해 몇 시간을 낭비했다. 아마도 매달 혹은 매년 2초씩 찾고 클릭해야 할 것이다.자동화의 아름다움.

공식.


왜 내가 이렇게 오래 걸려서 알았는지 알고 싶을지도 몰라.이것은 Concept의 공식 편집기가 좋지 않고 단독 정수(예를 들어 "연 + 월 + 날짜")에서 날짜 필드를 만드는 간단한 방법이 없기 때문이다.
그래서 내가 최종적으로 얻은 공식은 이렇다.

더 나은 형식, 복사 및 붙여넣기 작업을 원하는 경우 다음 GraphQL 노드와 유사한 구조를 사용합니다.
formatDate(
  dateAdd(
    dateAdd(
      dateAdd(
        now(), 
        subtract(
          date(prop("Start Date")), 
          date(now())
        ), 
        "days"
      ), 
      if(
        and(
          equal(
            prop("Billing"), 
            "Monthly"
          ), 
          smallerEq(
            date(prop("Start Date")), 
            date(now())
          )
        ), 
        1, 
        if(
          equal(
            prop("Billing"), 
            "Yearly"
          ), 
          subtract(
            month(prop("Start Date")),
            month(now())
          ),0
        )
      ), 
      "months"
    ), 
    if(
      and(
        equal(
          prop("Billing"), 
          "Yearly"
        ), 
        smaller(
          month(prop("Start Date")), 
          month(now())
        )
      ), 
      1, 
      0
    ), 
    "years"
  ),
  "MMMM D, YYYY"
)

내가 어떻게 이 공식을 얻었는지


우리 이 공식을 분해합시다.
데이터베이스에 추가 필드를 추가하지 않는 상황에서 나는 몇 개의 상수만 사용할 수 있다. now() 현재 시간에, prop(field) 데이터베이스에 있는 열에, 나머지는 자술적 함수이다.

날짜를 계산하다


우선, 나는 반드시 한 달의 정확한 날짜를 찾아야 한다.나는 항상 모든 구독의 첫 번째 갱신 날짜를 알고 있기 때문에 가장 간단한 방법은 당일과 갱신 날짜 간의 차이를 추가하는 것이다. 다음과 같다. current_day + (start_day - current_day)개념 공식으로 전환:

내 생각에 date() 결코 자명한 것은 아니다. 왜냐하면 그것은 실제로 한 달의 며칠째 돌아왔기 때문이다.

월을 계산하다


다음으로, 나는 이전 조회의 출력만으로 정확한 달을 계산해야 한다.현재 두 가지 옵션이 있습니다. 만약 그것이 매달 구독하고 현재 날짜가 초기 구독 날짜보다 크다면, 나는 달을 1씩 늘려야 합니다. 그렇지 않으면 0을 늘려야 합니다.
나는 앞의 공식 부분을 $day 라고 부른다

그나저나 add()and() 연산자가 아닌 연산자를 왜 사용하는지 알고 싶은 사람들에게는 기본적으로 왜 그런지 궁금하다.
물론 이것은 완전히 효과가 있는 것은 아니다. 왜냐하면 매년 구독이 있기 때문이다.매달 구독하는 달은 늘어나지만 매년 구독하는 달은 해마다 달라지지 않는다.우리는else자구(함수if()의 세 번째 매개 변수)에 끼워 넣은if문장을 추가하여 이 문제를 해결할 수 있으며, 마지막으로 우리는 두 가지 구독 유형의 정확한 달을 얻을 수 있다.

나는 보라색으로 추가된 부분을 강조 표시했다

연도를 계산하다


마지막으로 연도 계산은 매우 간단하다. 왜냐하면 앞의 단계에 달을 추가하면 연도 변환을 처리하기 때문이다.반면 이 부분은 매년 구독하는 해를 추가하고 정상적인 시간 없이 포맷한다.마찬가지로 나는 $month를 사용하여 이전의 결과를 나타낼 것이다.

끝내다


그래서 이것은 결코 시간을 완전히 낭비하는 것이 아니다. 지금 나는 내가 처음 지불한 날짜와viola를 입력하면 자동으로 다음 만기일이 된다.내가 배운 것은 간격과 축소가 확실히 도움이 되고, 이 명명 함수를 읽는 것보다 수학 연산자가 내 머릿속에 뿌리 깊게 박혀 있다는 것이다.나는 네가 나의 노력을 좋아하고 이 기능을 이용하여 너 자신의 전자 표를 만들어 주기를 바란다.만약 당신이 종이에 필기를 하거나, 아래의 평론에 필기를 하는 다른 프로그램이 있다면, 저에게 알려주세요.

보너스


만약 누군가가 알고 싶다면, 나는 실제로 화면 캡처에서만 그것을 밝은 모드로 설정하지만, 보통 나는 어두운 모드에서 그것을 사용한다.

또한 제가 위에서 한 것처럼 멋진 코드 캡처를 만들고 싶다면 carbon.now.sh 위에 있습니다.
만약 당신이 나의 매일 인코딩을 알고 싶다면, 트위터에서 나를 팔로우하세요!

좋은 웹페이지 즐겨찾기