하이퍼람다 과정 101

하루 만에 Hyperlambda를 완전히 이해하는 것이 목표인 전체 Hyperlambda 과정을 방금 만들었습니다. 이 과정은 일련의 YouTube 비디오로 제공되며 Hyperlambda의 일부 측면을 보여주므로 내가 하고 있는 것을 반복하고 진행하면서 연습 문제를 풀 수 있습니다. 과정은 Hello World Hyperlambda 앱으로 시작하지만 코드 및 다중 스레드 프로그래밍을 유지하는 코드를 만드는 방법과 같은 복잡한 주제로 빠르게 진행됩니다. 전체를 찾을 수 있습니다.

색인


  • 세션 1 – Hello World, Hyperlambda 구문 및 평가자
  • 세션 2 – 기계가 코드를 생성하는 방법
  • 세션 3 - 표현식 및 슬롯을 사용하여 트리 변경
  • 세션 4 - 동적 슬롯 및 Hyperlambda 파일 실행
  • 세션 5 - 다중 스레드 프로그래밍 구조
  • 세션 6 – Angular LowCode CRUD 생성기
  • 세션 7 – 인증, 승인, JWT 및 RBAC
  • 세션 8 - CRUD 생성기의 출력 분석
  • 세션 9 – 사용자 정의 인증 끝점 만들기
  • 세션 10 – 사용자 정의 인증 끝점 만들기
  • 세션 11 – [unwrap] 슬롯
  • 세션 12 – CRM 실습 만들기
  • 세션 13 - CRM 시스템 구현
  • 세션 14 – 작업 관리 시스템 만들기
  • 세션 15 – 작업 관리 시스템 만들기
  • 세션 16 – Hyperlambda를 무엇에 사용할 수 있습니까?
  • 세션 17 – Hyperlambda의 레코드 슬라이싱
  • 세션 18 - 데이터베이스 및 SQL 슬롯
  • 세션 19 - 분기 및 루핑
  • 세션 20 - 기계가 기계와 대화할 때
  • 세션 21 - Hyperlambda의 웹 소켓
  • 세션 22 – 채팅 클라이언트 만들기
  • 세션 23 - 자동으로 생성된 단위 테스트
  • 세션 24 - SQL을 사용하여 웹 API 생성
  • 세션 25 – 인터셉터

  • 하이퍼람다 코드



    아래에서 과정 중에 생성하는 일부 스니펫 및 HTTP 끝점을 찾을 수 있습니다. 그들이 하는 일을 이해하려면 위의 비디오 과정을 시청하고 과정에서 사용할 때 관련 스니펫을 다시 참조하십시오.

    튜토리얼-01-01

    .foo
       foo1:bar1
       foo2:bar2
       foo3:bar3
    .foo2
       foo4:bar4
          foo5:bar5
    .dest
    for-each:x:@.foo/*
       add:x:@.dest
          get-nodes:x:@.dp/#
    


    튜토리얼-02-01

    .lambda
       http.get:"https://microsoft.com"
       if
          eq:x:@http.get
             .:int:200
          .lambda
             log.info:Microsoft.com seems to be fine!
       else
          log.error:Microsoft.com is NOT OK!!
    lambda2hyper:x:@.lambda/*
    data.connect:code
       data.create
          table:snippets
          values
             content:x:@lambda2hyper
    


    튜토리얼-02-02

    .lambda
    data.connect:code
       data.read
          table:snippets
          columns
             content
          limit:-1
       for-each:x:@data.read/*/*
          add:x:@.lambda
             hyper2lambda:x:@.dp/#
    eval:x:@.lambda
    


    튜토리얼-02-03

    /*
     * Script that formats all Hyperlambda files recursively within
     * the specified folder.
     */
    .folder:/modules/northwind/
    io.file.list-recursively:x:-
    for-each:x:-/*
       if
          strings.ends-with:x:@.dp/#
             .:.hl
          .lambda
             io.file.load:x:@.dp/#
             hyper2lambda:x:-
                comments:true
             remove-nodes:x:@hyper2lambda/*/auth.ticket.verify
             lambda2hyper:x:@hyper2lambda/*
                comments:true
             io.file.save:x:@.dp/#
                get-value:x:@lambda2hyper
    


    튜토리얼-02-04

    /*
     * Script that formats all Hyperlambda files recursively within
     * the specified folder.
     */
    .folder:/modules/northwind/
    io.file.list-recursively:x:-
    for-each:x:-/*
       if
          strings.ends-with:x:@.dp/#
             .:.hl
          .lambda
             io.file.load:x:@.dp/#
             hyper2lambda:x:-
                comments:true
             insert-before:x:@hyper2lambda/*/data.connect
                .
                   auth.ticket.verify:admin, root, guest, foo-bar
             lambda2hyper:x:@hyper2lambda/*
                comments:true
             io.file.save:x:@.dp/#
                get-value:x:@lambda2hyper
    


    튜토리얼-04-01

    slots.create:foo
       math.add:x:@.arguments/0
          get-value:x:@.arguments/1
       return:x:-
    tutorial-04-02
    
    slots.create:foo
       math.add:x:@.arguments/0
          get-value:x:@.arguments/1
    


    튜토리얼-05-01

    /*
     * Creates 4 fire and forget threads.
     */
    fork
       http.get:"https://aista.com"
    fork
       http.get:"http://microsoft.com"
    fork
       http.get:"https://google.com"
    fork
       http.get:"https://dzone.com"
    
    /*
     * Creates 4 threads and waits for all threads to return
     * before it proceeds.
     */
    join
       fork
          http.get:"https://aista.com"
       fork
          http.get:"http://microsoft.com"
       fork
          http.get:"https://google.com"
       fork
          http.get:"https://dzone.com"
    
    /*
     * Creates 4 sequentially invoked HTTP GET invocations.
     */
    http.get:"https://aista.com"
    http.get:"http://microsoft.com"
    http.get:"https://google.com"
    http.get:"https://dzone.com"
    


    튜토리얼-05-02

    // Thread number 1, loads a file, concatenates to it, and saves the file again.
    fork
       .lambda1
          semaphore:semaphore-thread
             io.file.load:/foo.txt
             strings.concat
                get-value:x:@io.file.load
                .:"Appended by lambda object 1\r\n"
             io.file.save:/foo.txt
                get-value:x:@strings.concat
       eval:x:@.lambda1
    
    // Thread number 2, loads a file, concatenates to it, and saves the file again.
    fork
       .lambda2
          semaphore:semaphore-thread
             io.file.load:/foo.txt
             strings.concat
                get-value:x:@io.file.load
                .:"Appended by lambda object 2\r\n"
             io.file.save:/foo.txt
                get-value:x:@strings.concat
       eval:x:@.lambda2
    


    HTTP 끝점



    아래에서 과정 중에 생성하는 Hyperlambda HTTP 끝점을 찾을 수 있습니다.

    tutorial01.get.hl

    .arguments
       name:string
       age:int
    
    strings.concat
       .:"Hello there "
       get-value:x:@.arguments/*/name
       .:", you are "
       get-value:x:@.arguments/*/age
       .:" years old"
    
    unwrap:x:+/*
    return
       result:x:@strings.concat
    


    tutorial02.get.hl

    .foo
       foo1:bar1
       foo2:bar2
       foo3:bar3
    .foo2
       foo4:bar4
          foo5:bar5
    .dest
    for-each:x:@.foo/*
       add:x:@.dest
          get-nodes:x:@.dp/#
    lambda2hyper:x:../*
    log.info:x:-
    return:x:@.dest/*
    


    tutorial03.get.hl

    /*
     * Example of how to secure your API endpoint using JWT and
     * the internals of Hyperlambda's JWT token slots.
     */
    
    // Throws an exception unless user belongs to root or admin role.
    auth.ticket.verify:root, admin
    
    return
       result:Hello World from a secure endpoint
    tutorial04.get.hl
    
    .data
       foo1:bar1
       foo2:bar2
    
    unwrap:x:+/*
    return
       value1:x:@.data/*/foo1
       value2:x:@.data/*/foo2
    tutorial05.get.hl
    
    .arguments
       name:string
    
    if
       eq:x:@.arguments/*/name
          .:Thomas
       .lambda
          return
             result:Hi boss!
    else-if
       eq:x:@.arguments/*/name
          .:John
       .lambda
          return
             result:Hi John!
    else
       return
          result:Hi stranger!
    


    tutorial06.post.hl

    /*
     * Allows the caller to (securely) pass in Hyperlambda to
     * our endpoint and execute it, allowing the caller to
     * specify the logic to execute, and what data to return.
     */
    .arguments
       body:*
    .accept:application/hyperlambda
    
    // Loading Hyperlambda from [body] argument.
    io.stream.read:x:@.arguments/*/body
    
    // Ensuring we return raw Hyperlambda to caller.
    response.headers.set
       Content-Type:application/hyperlambda
    
    // Transforming to Hyperlambda and adding lambda into [.lambda] object.
    add:x:+/*/.lambda
       hyper2lambda:x:@io.stream.read
    
    // [whitelist] invocation preventing malicious slots from being executed.
    whitelist
    
       // Slots caller is allowed to invoke.
       vocabulary
          add
          insert-before
          insert-after
          set-value
          set-name
          vocabulary
          slots.vocabulary
          for-each
          while
          if
          else-if
          else
          strings.concat
          return
          return-nodes
          unwrap
       .lambda
    
    // Returning lambda object to caller.
    lambda2hyper:x:@whitelist/*
    return:x:-
    


    인터셉터.hl

    data.connect:crm
       .interceptor
    
    


    foo.get.hl

    data.select:select * from status
    return:x:-/*
    

    좋은 웹페이지 즐겨찾기