Js 와 Groovy 의 언어 차원 에서 의 비교, "Javaer 가 보 는 Js" 겸 담
5609 단어 groovy
그래서 자바 / Groovy 와 Js 의 언어 차원 에 대한 개인 적 인 비교 와 이 해 를 쓰 고 싶 습 니 다. 만약 에 자바 로 서 Js 에 대해 편견 이 있다 면 웹 개발 에 종사한다 면 Js 에 대해 깊이 알 아 보 는 것 도 좋 습 니 다.
***** *****
본문 은 하나의 예 로 시작한다.
createFn : function(tag){
return (function(tagIn){
return function(text, attr){
var attrStr = '';
if(attr){
for(key in attr)
attrStr += key + '="' + attr[key] + '" ';
}
return '<{0} {1}>{2}</{0}>'.format(tagIn, attrStr, text);
}
})(tag);
},
이 코드 는 제 가 자주 사용 하 는 html dom 생 성 을 위 한 기본 적 인 방법 입 니 다.
뒤에 이렇게 정의 할 수 있 습 니 다.
var tdFn = createFn('td');
< td > < / td > 와 같은 것 을 만 드 는 데 사 용 됩 니 다. 완전히 자바 가 보 는 template 모드 입 니 다. Fn programming 에 고유 명사 가 있 는 것 같 습 니 다.
이 예 는 매우 간단 합 니 다. 일부 Jser 는 JQuery 식 의 실현 $("td"). attr ({}). click (function () {}). append (") 에 익숙 할 수 있 습 니 다.
이것 은 모두 괜 찮 습 니 다. 저 는 이 예 를 통 해 비슷 한 문제 에 직면 하여 서로 다른 언어 에 서로 다른 해결 방법 이 있 을 수 있 습 니 다. 일부 자바 어 는 항상 '자바 에서 코드 를 이렇게 쓴다' 는 사상 을 가지 고 다른 언어 개발 방식 을 보지 마 세 요.
Js 의 입문 과 진급 학습 에 관 한 개인 추천 은 먼저 '블 로그 원 리 전의' 우 투 자 바스 크 립 트 '와' Iteeye 상 Js core 시리즈 '를 살 펴 보 자.
***** *****
***** *****
두 번 째 화 제 는 바로 언어 차원 의 기초 api 대비 입 니 다. 이 점 은 자바 가 더욱 만 족 스 러 울 것 입 니 다. 자바 sdk 의 기초 api (기본 유형 과 데이터 구조의 처리 와 조작) 가 이미 강하 기 때문에 n 다 중 제3자 의 라 이브 러 리, 특히 comons - lang / collection * * 는 말 할 필요 도 없습니다.그리고 Js 는 참고 수첩 의 size 를 보면 알 수 있 습 니 다. 얼마 되 지 않 지만 js 를 사용 한 적 이 있 는 사람 은 모두 느 낄 수 있 습 니 다. js 는 너무 유연 하고 특히 대상 체제 입 니 다.
마찬가지 로 Js 의 오픈 소스 라 이브 러 리 에 도 자바 와 유사 한 sdks 가 있 습 니 다. 예 를 들 어 dojo / extjs 는 개발 자 들 이 많이 사용 하지 않 을 수도 있 습 니 다. 예 를 들 어 JsClass, Google Closure Tools - Javaer 는 Js 가 Html 컨트롤, 예 쁜 UI 등에 만 관심 을 가지 지 마 세 요. 이 를 제외 하고 기초 api 가 풍부 하고 원생 태 적 인 Js 가 유연 하 며 디자인 과 확장 을 통 해 강해 질 수 있 습 니 다.
또한 JS 가 OO 와 Fn Programming 의 특징 을 동시에 갖 추고 있다 는 점 에서 폐쇄 적 인 특성 이 유용 하 다 고 할 수 밖 에 없다.
***** *****
***** *****
그 다음 에 제목 과 연결 하여 Groovy / Js 의 대 비 를 이야기 하면 자바 와 비교 하지 않 습 니 다. Groovy sdk 의 api 는 자바 보다 강하 습 니 다.
유형 체계 에 관 해 서 는 더 이상 말 하지 않 겠 습 니 다. 이 방면 에는 항아리 에 쓴 글 이 많 습 니 다.
먼저 폐쇄 를 말 하 다.
Groovy 언어 에서 의 패 키 지 는 Closure 클래스 로 이 루어 집 니 다. Groovy 파일 을 컴 파일 하면 중간 에 나타 난 패 키 지 는 모두 * * $Closure. class 단독 클래스 이 고 패 키 지 를 정의 하 는 것 도 간단 합 니 다.
def closure1 = {param1, param2 ->
}
Js 정의 함수 와 같 습 니 다.
var fun1 = function(param1, param2){
};
호출 할 때 Groovy 는 편 의 를 위해 () 를 사용 하지 않 아 도 됩 니 다. 예 를 들 어 Sql 의 용법 db. eachRow ({row - >
println row['name']
})
간략하게 썼 다
db.eachRow{row ->
println row['name']
}
그래서 Groovy 언어 에서 기본 함 수 는 폐쇄 와 관련 된 일반적인 폐쇄 를 마지막 매개 변수 로 합 니 다.
이거 Js 랑 똑 같 아 요.
예: (JQuery)
$([1,2,3,4,5]).each(function(){
console.log(this);
});
그 중에서 List (Array) 의 조작 방법 Js 의 일부 라 이브 러 리 는 Groovy 처럼 그렇게 많이 고려 하지 않 았 다. any / every / grep * * * 이지 만 이런 방법 들 은 Js 에서 쉽게 실현 된다. 예 를 들 어 JQuery.
var llEven = $([1,2,3,4,5]).filter(function(i){
return i % 2 == 0;
}).get();
프로 토 타 입 에서 직접 이 루어 져 도 됩 니 다. 적어도 Groovy 는 당신 이 이 루 고자 하 는 방법 이 final 인지 아 닌 지 를 고려 해 야 합 니 다.
그리고 정규:
정규 부분 은 사실 자바 언어 를 잘 못 해서 지원 하지 않 습 니 다. / ^ * * * / 이렇게 정규 대상 을 직접 정의 하 는 것 이 좋 습 니 다. Js 가 좋 습 니 다. String 은 직접 match (/) 할 수 있 습 니 다.
Groovy 는 개인 적 으로 조금 쓸모 가 있다 고 생각 합 니 다.
/ {? i} / 표 시 된 것 이 다 르 기 위해 서 인지 아 닌 지 모 르 겠 습 니 다.
PS, Groovy 언어 차원 의 추천 은 이 블 로 그 를 먼저 본 다음 에 Groovy in action / Mining Groovy 등 책 을 봅 니 다.
http://www.iteye.com/topic/1118016
그리고 Groovy 는 switch 구문 에서 한 걸음 더 연장 되 었 습 니 다. switch 의 대상 은 모든 유형 을 지원 하 는 것 같 습 니 다. case 정규, List, Closure 리 셋 이 가능 합 니 다.
Js 라면 if 라 고 써 야 지...
그리고 함수 인자:
자바 / Groovy 에 변 할 수 있 는 매개 변수 가 있 지만 모두 같은 유형 입 니 다. 컴 파일 한 후에 도 배열 형식 으로 이 루어 졌 습 니 다. Js 는 유연 합 니 다. arguments 는 전문 적 인 대상 입 니 다. 정의 방법 은 구체 적 인 매개 변 수 를 표시 하지 않 아 도 됩 니 다. 디자인 할 때 유연성 이 있 고 OO 다 중 생각 에 치 우 쳤 을 수도 있 습 니 다. 저 는 Php 의 DB 작업 의 라 이브 러 리 를 만 났 습 니 다. 그 중에서 일부 공용 되 었 습 니 다.매개 변수 가 많은 방법 이 있 고 방법 실현 에 대량의 if 분기 가 있 을 것 입 니 다. 자바 에서 디자인 하면 많은 독립 적 인 방법 에 대응 할 것 입 니 다.
그리고 기본 데이터 형식 간 의 전환:
Js 관련 null / undefine 1 = = true 0 = = false '0' = = true 같은 건 다 안 들 어 요.
Java 는 상당히 딱딱 합 니 다. if (obj! = null) * * * *
Groovy 가 좋 습 니 다. Js 와 유사 하고 = = 의 연산 자 도 있 습 니 다. Js 와 다른 것 은:
1. null 만 있 고 undefine * * 등 복잡 하지 않 음
2. if ([] & [:]) 는 false 이 고, JS 의 빈 대상 과 빈 배열 은 true 입 니 다.
3. type: of * * * 의 결과
Js 의 대상 은 영원히 {} 이기 때문에 안에서 어떻게 정의 하 든 자바 처럼 'Bean' 에 대응 할 수 있 을 거 라 고 생각 하지 않 습 니 다.
class Person{
def String name ***
}
JavaBean 의 경우 Groovy 의 기본 유형 과 JavaBean 의 전환 이 비교적 쉽 습 니 다. 보통 as 면 됩 니 다. Groovy 프로그램 에서 저 는 개인 적 으로 Beans 가 아 닌 기본 데이터 구 조 를 선 호 합 니 다.
이 방면 에 대해 서 는 아직 많은 세부 사항 이 있 는데, 특히 Js 의 브 라 우 저 호환성 문제 가 있다.
다른 특히 비 Js 와 관련 된 기능, 예 를 들 어 socket / thread, 비교 하면 Js 를 너무 괴 롭 히 는 것 같 습 니 다. node. js 등 서비스 업 체 js 에 대해 너무 잘 알 지 못 합 니 다. 제 개인 적 인 견 해 는 c 의 라 이브 러 리 인 이상 python / ruby 로 호출 하 는 것 이 js 보다 더 잘 해 야 한 다 는 것 입 니 다. 웹 클 라 이언 트 는 괴 롭 히 지 마 세 요. 각 브 라 우 저 업 체 가 많이 표준화 되 어 js 를 너무 비대 하 게 만 들 지 않 기 를 바 랍 니 다.
여러분 이 토론 하고 벽돌 을 치 러 오신 것 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android Build.Gradle 설명 🌟Gradle은 Android 애플리케이션의 개발 단계를 자동화하는 빌드 시스템입니다. Gradle 시스템에서 Java 플랫폼용 코드를 작성하는 동안 우리는 매우 간단한 언어인 Groovy 프로그래밍 언어를 사용합니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.