jQuery is DSL (Part 1 - DSL)
4348 단어 jquery
이후에 jQuery를 사용하는 사람들이 갈수록 많아졌고, 모두들 그것의 체인 방법으로 호출하기를 좋아했으며, 심지어는 이런 문법을 다른 언어로 보급하기도 했다.예: ASP.NET MVPOmar AL Zabir는 그의 서버 쪽 C# 구성 요소를 체인식 방법으로 호출할 수 있도록 설계했다.이때부터 저는 jQuery에 관심을 가지기 시작했고 체인 방법으로 호출되는 쓰기를 좋아하게 되었습니다. 또한 제 자바스크립트 구성 요소에서 유사한 API(참고Async와 Overload를 실현했습니다.마지막으로, 나는 이것이 사실 인터넷 DSL이라는 것을 갑자기 깨달았다.
이 글에서, 나는 먼저 인터넷 DSL에 대해 토론하고, 다음 글에서 왜 jQuery가 인터넷 DSL인지 설명하려고 한다.이제 가장 근본적인 문제부터 시작하자--
인터넷 DSL이란?
DSL은 Domain Specific Language, 즉 특정 영역의 문제를 설명하고 해결하는 데 사용되는 언어다.예를 들어 우리는 문자열의 특징을 전문적으로 기술하는 정규 표현식이 있고 데이터베이스 조회를 전문적으로 기술하는 SQL이 있으며 XML 구조를 전문적으로 기술하는 DTD와 XSD가 있으며 심지어 XML 변환을 전문적으로 기술하는 XSLT도 있다. 이것들은 모두DSL이다.
물론 우리가 주목하는 분야에 모두 기존의 DSL이 있는 것은 아니다. 이때 우리는 세 가지 선택이 있다.
I.DepositTo(new USD(200), CitiBank); /* C# */
I deposit 200USD to CitiBank /* E-DSL */
I.deposit(200.USD()).to(CitiBank); /* I-DSL */
첫 번째 방법의 원가가 가장 낮다. 당신은 OO의 사상만 있으면 된다. 당신은 항상 실체류를 설계할 수 있지만 인류가 이 분야의 문제를 묘사하는 사고방식과 어느 정도 차이가 있을 수 있다. (왜 USD는 new가 될 수 있습니까? 왜 그렇지 않습니까?
deposit [something] to [somewhere]
?).두 번째 방법의 원가가 가장 높다. 당신은 새로운 해석기를 써야 한다. 적어도 하나의 새로운 규칙을 쓴 다음에 YACC와 같은 도구로 해석기를 만들어 주어야 한다. 그러나 이렇게 나온 문법은 인류의 사고방식에 가장 가깝고 심지어 자연 언어처럼 유창하다.
세 번째 방법 용어인 상술한 두 가지 절충안은 문법이 그리 복잡하지 않으면 Builder 모델로 문법 분석을 실현할 수 있다. 쓴 문법은 자연 언어에 상당히 가깝지만 학습 문턱이 있다.스크립트 언어는 상당히 유연성이 있기 때문에 현재 많은 사람들이 스크립트 언어 내에서 인터넷 DSL을 실현하는 것을 선택하는 경향이 있다.
인터넷 DSL은 어떻게 구성됩니까?
흔히 볼 수 있는 두 가지 인터넷 DSL 구현 방법은 Method Chaining 및 Function Sequence입니다.만약 우리가 한 기계의 하드웨어 구성을 설명해야 한다면, 두 가지 실현 방식의 코드는 각각 다음과 같다.
/* Method Chaining */
computer()
.processor()
.cores(2)
.i386()
.disk()
.size(150)
.disk()
.size(75)
.speed(7200)
.sata()
.end();
/* Function Sequence */
computer();
processor();
cores(2);
processorType(i386);
disk();
diskSize(150);
disk();
diskSize(75);
diskSpeed(7200);
diskInterface(SATA);
어떤 글씨를 쓰든지 간에 중간에 반드시 분석기층을 써야 한다.문법 분석기가 상태기를 사용해야 하는 것처럼 인터넷 DSL의 실현도 현재 어떤 상태로 실행되고 그 다음에 어떤 유효한 상태로 옮길 수 있는지 기록하기 위해 상태기를 내장해야 한다.
이것은 문법 분석기와 상태기 실현을 전문적으로 다루는 문장이 아니기 때문에 우리는 관심사를 API 차원에서 유지하고 그 실현 세부 사항과 비용을 깊이 토론하지 않는다.우리는 체인 방법으로 인터넷 DSL을 실현할 수 있다면 충분하다는 것을 알고 있으며, jQuery가 이 점을 어떻게 잘 활용하는지에 대해서는 다음 글에서 다시 토론할 것이다.
소결
이 글에서 우리는 인터넷 DSL과 External DSL 간의 차이점을 이해했고 인터넷 DSL을 실현하는 구체적인 방식도 이해했다. 이것은 다음에 jQuery의 인터넷 DSL식 인터페이스를 토론하는 데 밑받침이 되었다.다음 글에서 우리는 왜 jQuery의 인터페이스를 이렇게 디자인해야 하는지, 사용자에게 어떤 편리함을 가져다 줄 수 있는지, 그리고 그 자체의 실현에 어떤 장점이 있는지 깊이 있게 살펴볼 것이다.
다음 글을 놓치지 않으려면 내 블로그 구독을 고려해 보세요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
jQuery 전후 예이 기사에서는 jquery after() 및 before() 메소드의 예를 볼 것입니다. before() 메서드는 선택한 요소 앞에 지정된 콘텐츠를 삽입합니다. after() 메서드는 선택한 요소 뒤에 지정된 콘텐츠...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.