Tải bản đầy đủ (.pptx) (17 trang)

Báo cáo lập trình java về The Nashorn JavaScript Engine

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (306.5 KB, 17 trang )

Trường Đại học Bách Khoa Hà Nội
Viện Công nghệ thông tin & Truyền thông
---------------------IT4784 – LẬP TRÌNH JAVA

Chương 7. The Nashorn
JavaScript Engine
Sinh viên : Phạm Tiến Dũng
MSSV

:20130694

Lớp

: CNTT2.03 – K58

Giáo Viên: TS. Nguyễn Hồng Quang
1


NỘI DUNG
NỘI DUNG

I. Mô tả yêu cầu
II. Nội dung
III.Bài tập

2


I.I.


MÔ TẢ YÊU CẦU
MÔ TẢ YÊU CẦU

1. Làm báo cáo
2. Trình bày slide lý thuyết chương 7 (7.3-7.5)
3. Tự đặt ra 3 câu hỏi trắc nghiệm liên quan đến phần mình làm

3


NỘI DUNG
NỘI DUNG
1. Invoking Methods
2. Constructing Objects
3. Strings

4


1. Invoking Methods
1. Invoking Methods
-Nếu có đoạn mã Java sau:
engine.put("stage", stage);
thì đoạn mã JavaScript có thể gọi
stage.setTitle('Hello');
-Trong thực tế, bạn cũng có thể sử dụng cú pháp
stage.title = 'Hello';
-Nashorn hỗ trợ cú pháp thuận tiện cho các hàm getters và setters.
-Nếu stage.title xuất hiện bên trái toán tử ‘=‘ tương đương setTitle
xuất hiện bên phải toán tử ‘=‘ tương đương getTitle


5


1. Invoking Methods
1. Invoking Methods
Quan sát ví dụ sau:

6


1. Invoking Methods
1. Invoking Methods
-JavaScript không có khái niệm về nạp chồng phương thức
-Nashorn cố gắng chọn phương thức Java phù hợp, dựa theo số lượng và kiểu của các tham số.

7


2. Constructing Objects
2. Constructing Objects
-Khi bạn muốn khởi tạo các đối tượng trong JavaScript
Có hai cơ chế.

 Cách 1:Sử dụng biến toàn cục Packages
var URL = java.net.URL ;// 1 đối tượng lớp java

 Cách 2:Sử dụng phương thức Java.type
var URL = Java.type('java.net.URL');
-Để khởi tạo một đối tượng ,ta sử dụng toán tử new

var url = new URL('');

8


2. Constructing Objects
2. Constructing Objects
-Cách 2 giúp xử lý lỗi tốt hơn nhưng cú pháp phức tạp
Ví dụ:
var url = new (Java.type ('java.net.URL')) ('');
-Nếu bạn sử dụng Java.type với toán tử new, bạn cần thêm một bộ dấu ngoặc đơn

9


2.
2.Constructing
ConstructingObjects
Objects
-Để imports inner class ta dùng
var entry = new java.util.AbstractMap.SimpleEntry('hello', 42);
-Nếu bạn sử dụng Java.type thì sử dụng ký tự $:
var entry = new (Java.type ('java.util.AbstractMap$SimpleEntry'))('hello', 42);

10


3. Strings
3. Strings
-Strings trong Nashorn là một đối tượng JavaScript.

Ví dụ, hãy xem xét lệnh sau
'Hello'.slice (-2) // Yield ‘ lo '
-Ở đây, chúng ta gọi phương thức JavaScript slice. Không có phương pháp như vậy trong Java
-Nhưng gọi
'Hello'.compareTo (' thế giới ')
cũng làm việc, mặc dù trong JavaScript không có phương thức compareTo. (Bạn chỉ cần sử dụng các toán tử <)
-Trong trường hợp này, các chuỗi JavaScript được chuyển thành các chuỗi Java.

11


3. Strings
3. Strings
-Việc chuyển đổi xảy ra tương tự với giá trị Numbers và Boolean.
Ví dụ.
'Hello'.slice (' - 2 ') là hoàn toàn hợp lệ. Chuỗi '-2' âm thầm chuyển đổi sang số -2

12


BÀI TẬP
BÀI TẬP
Câu 1:Cho câu lệnh JavaScript sau:
stage.setTitle('Hello');
Tìm câu lệnh tương đương(thực hiện cùng chức năng,có cùng kết quả đầu ra mà không báo lỗi):

A.

stage[title] = 'Hello';


B.

stage.title('Hello');

C.

stage.title = 'Hello' ;

D.

stage.('title') = 'Hello';

Đáp án đúng: C
Giải thích: A,B,D là sai cú pháp
C do stage.title nằm bên trái dấu = nên tương đương với phương thức setTitle

13


BÀI TẬP
BÀI TẬP
Câu 2: Cho đoạn lệnh Java sau:

Kết quả đầu ra là

A.
B.
C.
D.


2Hello,hoang2
2helloHello,hoang
2helloHello,hoang2
Ném ra 1 ngoại lệ

Đáp án đúng là A
14


BÀI TẬP
BÀI TẬP
Giải thích

 JavaScipt không có nạp chồng phương thức mà sẽ sử dụng phương thức được đinh nghĩa cuối cùng,
danh sách đối số trong JavaScipt sẽ được truyền vào 1 mảng và được gán lần lượt cho các tham số
của phương thức được gọi vì vậy khi gọi : funcA(\"2\", \"hello\") sẽ gọi phương thức function
funcA(c) và không báo lỗi thừa đối số .


Vậy print(funcA(\"2\", \"hello\")) sẽ in ra 2.
 Còn trong Java có nạp chồng phương thức nên user.getMessage(2) sẽ gọi phương thức
getMessage(String a) , đối số là 2 nhưng không báo lỗi vì trong Nashorn sẽ tự chuyển đổi 2 thành 1
String


Vậy print(user.getMessage(2)) sẽ in ra Hello,hoang2
 Đáp án là 2Hello,hoang2

15



BÀI TẬP
BÀI TẬP
Câu 3: Tìm câu lệnh không tương đương( không thực hiện cùng chức năng,không cùng kết quả đầu ra hoặc báo lỗi)
var Entry = Java.type('java.util.AbstractMap$SimpleEntry');
var entry=new Entry(‘hello’,42);
A.var entry = new java.util.AbstractMap.SimpleEntry('hello', 42);
B.var entry = new java.util.AbstractMap$SimpleEntry('hello', 42);
C.var Entry = new Java.type('java.util.AbstractMap$SimpleEntry')(‘hello’,42);
D.var Entry = java.util.AbstractMap$SimpleEntry;
var entry=new Entry(‘hello’,42);
Đáp án đúng là C
Giải thích:



A,B là sử dụng đối tượng Packages nên trước tên inner class có thể là dấu chấm hoặc $



C sử dụng phương thức Java.type nên cần thêm cặp dấu ngoặc tròn () sửa lại như sau:
var Entry = new (Java.type('java.util.AbstractMap$SimpleEntry'))(‘hello’,42);



D tương tự B nhưng viết tách câu lệnh ra



Vậy câu lệnh không tương đương là C


16


Cảm ơn thầy giáo và các bạn!

17



×