Hướng dẫn is javascript a static typed language? - javascript có phải là ngôn ngữ gõ tĩnh không?
bởi Preethi Kasireddy Là một nhà phát triển JavaScript, bạn có thể viết mã suốt cả ngày mà không gặp bất kỳ loại tĩnh nào. Vậy tại sao phải học hỏi về họ? Vâng, hóa ra các loại học tập không chỉ là một bài tập trong việc mở rộng tâm trí. Nếu bạn sẵn sàng đầu tư một chút thời gian vào việc tìm hiểu về các loại tĩnh, lợi thế, bất lợi và sử dụng các trường hợp, nó có thể giúp chương trình của bạn vô cùng. Quan tâm đến? Chà, bạn đã may mắn-đó là những gì phần còn lại của loạt bài bốn phần này nói về. Cách nhanh nhất để hiểu các loại tĩnh là đối chiếu chúng với các loại động. Một ngôn ngữ với các loại tĩnh được gọi là ngôn ngữ được gõ tĩnh. Mặt khác, một ngôn ngữ với các loại động được gọi là ngôn ngữ được gõ động.statically-typed language. On the other hand, a language with dynamic types is referred to as a dynamically-typed language. Sự khác biệt cốt lõi là các ngôn ngữ được loại tĩnh thực hiện kiểm tra loại tại thời điểm biên dịch, trong khi các ngôn ngữ được tính tự động thực hiện kiểm tra loại khi chạy.statically-typed
languages perform type checking at compile time, while dynamically-typed languages perform type checking at runtime. Điều này để lại một khái niệm nữa để bạn giải quyết: có nghĩa là gì khi kiểm tra loại hình?type-checking” mean? Để giải thích, hãy để Lôi nhìn vào các loại trong Java so với JavaScript. Các loại trực tuyến đề cập đến loại dữ liệu được xác định. refers to the type of data being defined. Ví dụ, trong Java nếu bạn xác định Điều này có một loại chính xác, bởi vì chú thích Mặt khác, nếu bạn cố gắng khai báo: Điều này sẽ không biên dịch vì nó có một loại không chính xác. Nó rõ ràng đánh dấu JavaScript và các ngôn ngữ được loại động khác có một cách tiếp cận khác, cho phép bối cảnh thiết lập loại dữ liệu đang được xác định: Câu chuyện dài: Các ngôn ngữ được loại hình tĩnh yêu cầu bạn khai báo các loại dữ liệu của các cấu trúc của bạn trước khi bạn có thể sử dụng chúng. Ngôn ngữ được gõ tự động thì không. JavaScript ngụ ý kiểu dữ liệu, trong khi Java tuyên bố nó hoàn toàn. Vì vậy, như bạn có thể thấy, các loại cho phép bạn chỉ định chương trình bất biến hoặc các xác nhận và điều kiện logic theo đó chương trình sẽ thực hiện.invariants, or the logical assertions and conditions under which the program will execute. Kiểm tra loại xác minh và thực thi rằng loại cấu trúc (hằng số, boolean, số, biến, mảng, đối tượng) phù hợp với một bất biến mà bạn đã chỉ định. Ví dụ, bạn có thể chỉ định rằng chức năng này luôn trả về một chuỗi. Khi chương trình chạy, bạn có thể giả sử một cách an toàn rằng nó sẽ trả về một chuỗi. verifies and enforces that
the type of a construct (constant, boolean, number, variable, array, object) matches an invariant that you’ve specified. You might, for example, specify that “this function always returns a string.” When the program runs, you can safely assume that it will return a string. Sự khác biệt giữa kiểm tra loại tĩnh và kiểm tra loại động nhất khi xảy ra lỗi loại. Trong một ngôn ngữ được gõ tĩnh, các lỗi loại xảy ra trong bước biên dịch, nghĩa là tại thời điểm biên dịch. Trong các ngôn ngữ được xy bằng động, các lỗi chỉ xảy ra khi chương trình được thực thi. Đó là, vào thời gian chạy.runtime. Điều này có nghĩa là một chương trình được viết bằng ngôn ngữ được gõ động (như JavaScript hoặc Python) có thể biên dịch ngay cả khi nó chứa các lỗi loại có thể ngăn tập lệnh chạy đúng. Mặt khác, nếu một chương trình được viết bằng ngôn ngữ được gõ tĩnh (như Scala hoặc C ++) có chứa các lỗi loại, nó sẽ không biên dịch cho đến khi các lỗi đã được sửa. Một kỷ nguyên mới của JavaScriptBởi vì JavaScript là một ngôn ngữ được gõ động, bạn có thể đi về việc khai báo các biến, hàm, đối tượng và bất cứ điều gì mà không cần khai báo loại. Thuận tiện, nhưng không phải lúc nào cũng lý tưởng. Đó là lý do tại sao các công cụ như Flow và TypeScript gần đây đã bước vào để cung cấp cho các nhà phát triển JavaScript tùy chọn * * để sử dụng các loại tĩnh. Flow là một thư viện kiểm tra loại tĩnh nguồn mở do Facebook phát triển và phát hành cho phép bạn thêm các loại vào mã JavaScript của bạn. is an open-source static type checking library developed and released by Facebook that allows you to incrementally add types to your JavaScript code. Mặt khác, TypeScript là một superset biên dịch xuống JavaScript-mặc dù nó có cảm giác gần giống như một ngôn ngữ được gõ tĩnh mới theo đúng nghĩa của nó. Điều đó nói rằng, nó trông và cảm thấy rất giống với JavaScript và không khó để nhận., on the other hand, is a superset that compiles down to JavaScript — although it feels almost like a new statically-typed language in its own right. That said, it looks and feels very similar to JavaScript and isn’t hard to pick up. Trong cả hai trường hợp, khi bạn muốn sử dụng các loại, bạn rõ ràng cho công cụ về (các) tệp nào để kiểm tra loại. Đối với TypeScript, bạn thực hiện điều này bằng cách viết các tệp với tiện ích mở rộng Khi bạn đã tuyên bố rằng bạn muốn kiểm tra lại một tệp, bạn sẽ sử dụng cú pháp tương ứng của họ để xác định các loại. Một điểm khác biệt để tạo ra giữa hai công cụ là luồng là một loại kiểm tra loại và không phải là trình biên dịch. TypeScript, mặt khác, là một trình biên dịch. Tôi thực sự tin rằng các công cụ như Flow và TypeScript thể hiện sự thay đổi và tiến bộ thế hệ cho JavaScript. Cá nhân, tôi đã học được rất nhiều bằng cách sử dụng các loại trong ngày của tôi. Đó là lý do tại sao tôi hy vọng bạn sẽ tham gia cùng tôi trên hành trình ngắn và ngọt ngào này thành các loại tĩnh. Phần còn lại của bài đăng 4 phần này sẽ bao gồm: Phần I. Một đoạn giới thiệu nhanh về cú pháp và ngôn ngữ dòng chảy Phần II & III. Ưu điểm & nhược điểm của các loại tĩnh (với các ví dụ đi bộ chi tiết) Phần IV. Bạn có nên sử dụng các loại tĩnh trong javascript hay không? Lưu ý rằng tôi đã chọn luồng qua các bản thảo trong các ví dụ trong bài đăng này vì sự quen thuộc của tôi với nó. Đối với mục đích của riêng bạn, xin vui lòng nghiên cứu và chọn công cụ phù hợp cho bạn. TypeScript cũng là tuyệt vời. Không có gì khó chịu, hãy để bắt đầu! Phần 1: Giới thiệu nhanh về cú pháp và ngôn ngữĐể hiểu được những ưu điểm và nhược điểm của các loại tĩnh, trước tiên bạn nên có được sự hiểu biết cơ bản về cú pháp cho các loại tĩnh bằng cách sử dụng luồng. Nếu bạn không bao giờ làm việc bằng ngôn ngữ được gõ tĩnh trước đây, cú pháp có thể mất một chút thời gian để làm quen. Hãy bắt đầu bằng cách khám phá cách thêm các loại vào các nguyên thủy JavaScript, cũng như các cấu trúc như mảng, đối tượng, chức năng, v.v. booleanĐiều này mô tả giá trị Lưu ý rằng khi bạn muốn chỉ định một loại, cú pháp bạn sử dụng là: con sốĐiều này mô tả số điểm nổi của IEEE 754. Không giống như nhiều ngôn ngữ lập trình khác, JavaScript không định nghĩa các loại số khác nhau (như số nguyên, các điểm ngắn, dài và nổi). Thay vào đó, các số luôn được lưu trữ dưới dạng số điểm nổi chính xác kép. Do đó, bạn chỉ cần một loại số để xác định bất kỳ số nào.
sợi dâyĐiều này mô tả một chuỗi. nullĐiều này mô tả kiểu dữ liệu voidĐiều này mô tả kiểu dữ liệu Lưu ý rằng Lưu lượng sẽ gây ra lỗi vì loại MảngMô tả một mảng JavaScript. Bạn sử dụng cú pháp ________ 23; T> để mô tả một mảng có các phần tử của một số ____24Type T. Lưu ý cách tôi thay thế Sự vậtĐiều này mô tả một đối tượng JavaScript. Có một vài cách khác nhau để thêm các loại vào các đối tượng. Bạn có thể thêm các loại để mô tả hình dạng của một đối tượng: Bạn có thể định nghĩa các đối tượng là bản đồ nơi bạn ánh xạ một chuỗi đến một số giá trị: Bạn cũng có thể định nghĩa một đối tượng là loại Cách tiếp cận cuối cùng này cho phép chúng tôi đặt bất kỳ khóa và giá trị nào trên đối tượng của bạn mà không bị hạn chế, do đó, nó không thực sự thêm nhiều giá trị khi liên quan đến việc kiểm tra loại. không tí nàoĐiều này có thể đại diện cho bất kỳ loại. Loại Một tình huống bạn có thể thấy Ví dụ: nếu bạn đang sử dụng thư viện mở rộng Object.prototype với thuộc tính Bạn có thể gặp lỗi: Để phá vỡ điều này, bạn có thể sử dụng Chức năngCách phổ biến nhất để thêm các loại vào các chức năng là thêm các loại vào các đối số đầu vào của nó và (khi có liên quan) giá trị trả về: Bạn thậm chí có thể thêm các loại vào các chức năng Async (xem bên dưới) và Trình tạo: Lưu ý cách tham số thứ hai của chúng tôi Loại bí danhLoại bí danh là một trong những cách yêu thích của tôi để sử dụng các loại tĩnh. Chúng cho phép bạn sử dụng các loại hiện có (số, chuỗi, v.v.) để soạn các loại mới: Ở trên, tôi đã tạo một loại mới có tên Bây giờ nếu bạn muốn sử dụng loại Bạn cũng có thể tạo các bí danh loại cho bất kỳ nguyên thủy nào bằng cách gói loại bên trong loại khác. Ví dụ: nếu bạn muốn nhập bí danh là Bằng cách này, bạn đã chỉ ra rằng GenericsGenerics là một cách để trừu tượng hóa các loại. Điều đó có nghĩa là gì? Hãy để một cái nhìn: Tôi đã tạo ra một sự trừu tượng cho loại Vâng tôi biết. Đó là thứ chóng mặt nếu đây là lần đầu tiên bạn nhìn vào các loại. Tôi hứa với phần giới thiệu nhẹ nhàng của người Viking đã gần kết thúc! Có lẽCó thể loại cho phép chúng tôi nhập giá trị có khả năng Ở đây tôi nói rằng thông điệp đó là Bạn cũng có thể sử dụng có thể để chỉ ra rằng một thuộc tính đối tượng sẽ thuộc một số loại Bằng cách đặt Công đoàn rời rạcĐây là một cách mạnh mẽ khác để mô hình hóa dữ liệu. Các công đoàn rời rạc rất hữu ích khi bạn có một chương trình cần xử lý các loại dữ liệu khác nhau cùng một lúc. Nói cách khác, hình dạng của dữ liệu có thể khác nhau dựa trên tình huống. Mở rộng về loại Sau đó, bạn có thể xác định loại thanh toán của mình là một liên kết rời rạc với ba trường hợp. Phương thức thanh toán bây giờ chỉ có thể là một trong ba hình dạng này. Tài sản Bạn sẽ thấy các ví dụ thực tế hơn về các loại liên minh rời rạc sau này trong Phần II. Được rồi, gần như đã hoàn thành. Có một vài tính năng khác của Flow đáng được đề cập trước khi kết thúc phần giới thiệu này: 1) Loại suy luận: Flow sử dụng loại suy luận nếu có thể. Loại suy luận khởi động khi trình kiểm tra loại có thể tự động suy ra loại dữ liệu của một biểu thức. Điều này giúp tránh chú thích quá mức.: Flow uses type inference where possible. Type inference kicks in when the type checker can automatically deduce the data type of an expression. This helps avoid excessive annotation. Ví dụ: bạn có thể viết: Mặc dù lớp này không có các loại, Flow có thể gõ đầy đủ kiểm tra nó: Ở đây, tôi đã cố gắng xác định Một điều cần lưu ý là những người bảo trì luồng khuyến nghị rằng nếu bạn đang xuất định nghĩa lớp này, bạn sẽ muốn thêm các định nghĩa loại rõ ràng để dễ dàng tìm thấy nguyên nhân của lỗi khi lớp không được sử dụng trong bối cảnh cục bộ. 2) Các thử nghiệm loại động: Điều này về cơ bản là dòng chảy có logic để xác định loại giá trị sẽ là gì khi chạy và do đó có thể sử dụng kiến thức đó khi thực hiện phân tích tĩnh. Chúng trở nên hữu ích trong các tình huống như khi dòng chảy gây ra lỗi nhưng bạn cần thuyết phục Flow rằng những gì bạn làm là đúng.: What this basically means is that Flow has logic to determine what the the type of a value will be at runtime and so is able to use that knowledge when performing static analysis. They become useful in situations like when Flow throws an error but you need to convince flow that what you’re doing is right. Tôi đã giành chiến thắng trong quá nhiều chi tiết bởi vì nó có nhiều tính năng nâng cao mà tôi hy vọng sẽ viết riêng, nhưng nếu bạn muốn tìm hiểu thêm, thì nó đáng để đọc qua các tài liệu. Chúng tôi đã hoàn thành với cú phápChúng tôi bao phủ rất nhiều mặt đất trong một phần! Tôi hy vọng tổng quan cấp cao này đã hữu ích và có thể quản lý được. Nếu bạn tò mò muốn đi sâu hơn, tôi khuyến khích bạn đi sâu vào các tài liệu được viết tốt và khám phá. Với cú pháp tránh xa, cuối cùng hãy để có được phần thú vị: khám phá những ưu điểm và nhược điểm của việc sử dụng các loại! Tiếp theo: Phần 2 & 3. Học mã miễn phí. Chương trình giảng dạy nguồn mở của Freecodecamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu JavaScript có được gõ động hoặc tĩnh không?Các ngôn ngữ được xy bằng động là các ngôn ngữ (như JavaScript) trong đó trình thông dịch gán các biến một loại trong thời gian chạy dựa trên giá trị của biến tại thời điểm đó. languages are those (like JavaScript) where the interpreter assigns variables a type at runtime based on the variable's value at the time.
JavaScript có phải là ngôn ngữ đánh máy không?JavaScript được coi là một ngôn ngữ gõ yếu của người Viking hoặc người khác.Loại câu hỏi ở đây là các loại dữ liệu mà không liên quan đến việc gõ từ bàn phím của bạn.. The type in question here are the data types—nothing to do with typing from your keyboard.
Ngôn ngữ được đánh máy tĩnh là gì?Một ngôn ngữ được gõ tĩnh là ngôn ngữ (như Java, C hoặc C ++) trong đó các loại biến được biết đến tại thời điểm biên dịch.Trong hầu hết các ngôn ngữ này, các loại phải được chỉ định rõ ràng bởi lập trình viên;Trong các trường hợp khác (chẳng hạn như OCAML), kiểu suy luận cho phép lập trình viên không chỉ ra các loại biến của chúng.a language (such as Java, C, or C++) where variable types are known at compile time. In most of these languages, types must be expressly indicated by the programmer; in other cases (such as OCaml), type inference allows the programmer to not indicate their variable types.
Tại sao JavaScript là ngôn ngữ được gõ động?JavaScript là một ngôn ngữ gõ động.Khi bạn khai báo một biến, bạn không cần chỉ định loại này là loại nào.JavaScript Engine infer loại biến này dựa trên giá trị được gán cho thời gian chạy.When you declare a variable, you do not need to specify what type this variable is. Javascript engine infers what type this variable is based on the value assigned to at run time. |