Chúng tôi biết hai loại dữ liệu khác nhau. số và chuỗi. Ví dụ: chúng ta có thể cộng các số, vì phép cộng là một phép toán đối với loại "số"
Nhưng nếu bạn thêm một số vào một chuỗi thì sao?
console.log[1 + '7']; // => '17'
Mặc dù '7'
là một chuỗi, trình thông dịch JavaScript đã trả về 17
như thể chúng ta đang thêm hai chuỗi. Khi JavaScript nhận thấy loại không khớp, nó sẽ cố gắng chuyển đổi dữ liệu. Trong trường hợp của chúng tôi, nó chuyển đổi số 1
thành một chuỗi '1'
và sau đó chỉ cần nối '1'
và '7'
Không phải tất cả các ngôn ngữ có thể làm điều này. JavaScript là một ngôn ngữ gõ yếu. Nó nhận dạng các loại dữ liệu khác nhau [số, chuỗi, v.v. ], nhưng không sử dụng chúng quá nghiêm ngặt, cố gắng chuyển đổi dữ liệu khi có vẻ hợp lý. JavaScript thậm chí đôi khi lao vào cực đoan. Hầu hết các biểu thức không hoạt động trong các ngôn ngữ khác đều hoạt động hoàn hảo trong JavaScript. Cố gắng thực hiện bất kỳ phép toán số học nào [ngoại trừ phép cộng] với chuỗi hoặc kiểu dữ liệu khác [ngoại trừ khi cả hai toán hạng đều là số hoặc chuỗi chỉ bao gồm các số]. Bạn sẽ thấy rằng chúng luôn hoạt động và trả về NaN
, điều này hợp lý
const result = 'one' * 'two';
console.log[result]; // => NaN
https. // thay thế. com/@hexlet/js-basics-immutability-of-primitive-types
Trong các ngôn ngữ được gõ mạnh, việc thêm số vào chuỗi sẽ không hoạt động
JavaScript được tạo ra cho Internet, nơi tất cả thông tin được lưu trữ trong các chuỗi. Ngay cả khi bạn nhập số điện thoại hoặc năm sinh trên một trang web, thông tin đó sẽ chuyển đến máy chủ dưới dạng chuỗi chứ không phải số. Vì vậy, các nhà thiết kế ngôn ngữ đã quyết định rằng chuyển đổi loại tự động là phù hợp và thuận tiện
Chuyển đổi loại tự động ngầm này thực sự thuận tiện. Nhưng trong thực tế, tính năng này gây ra rất nhiều lỗi, khó phát hiện. Mã có thể hoạt động hoặc không thành công, tùy thuộc vào việc bạn có đủ may mắn để quá trình chuyển đổi tự động được thực hiện chính xác hay không. Một lập trình viên có thể không nhận thấy điều này ngay lập tức
Bạn sẽ gặp những trường hợp này hơn một lần trong các nhiệm vụ tiếp theo. Bạn sẽ thường hỏi "Tại sao mã của tôi không hoạt động theo cách tôi mong đợi?"
Gõ yếu chạy như một sợi chỉ trong toàn bộ quá trình phát triển Javascript
Hướng dẫn
In kết quả của
const result = 'one' * 'two';
console.log[result]; // => NaN
0. Chuyển đổi const result = 'one' * 'two';
console.log[result]; // => NaN
0 thành một chuỗi. Thử nghiệm với các số khác nữaBài tập không vượt qua kiểm tra. phải làm gì?
Nếu bạn gặp bế tắc, đã đến lúc đặt câu hỏi của bạn trong «Thảo luận». Làm thế nào để đặt một câu hỏi một cách chính xác
- Hãy chắc chắn đính kèm đầu ra thử nghiệm, nếu không có nó thì hầu như không thể tìm ra điều gì đã xảy ra, ngay cả khi bạn hiển thị mã của mình. Các nhà phát triển rất phức tạp khi thực thi mã trong đầu, nhưng có một sai lầm trước mắt họ có lẽ sẽ hữu ích nhất
Các bài kiểm tra được thiết kế để chúng kiểm tra giải pháp theo những cách khác nhau và dựa trên các dữ liệu khác nhau. Thường thì giải pháp hoạt động với một loại dữ liệu đầu vào nhưng không hoạt động với các loại dữ liệu khác. Kiểm tra tab «Kiểm tra» để tìm ra điều này, bạn có thể tìm thấy các gợi ý ở đầu ra lỗi
Mã của tôi khác với mã của giáo viên 🤔Tốt rồi. 🙆 Một nhiệm vụ trong lập trình có thể được giải quyết theo nhiều cách khác nhau. Nếu mã của bạn vượt qua tất cả các bài kiểm tra, thì mã đó tuân thủ các điều kiện của tác vụ
Trong một số trường hợp hiếm hoi, giải pháp có thể được điều chỉnh để thử nghiệm, nhưng điều này có thể được nhìn thấy ngay lập tức
Tôi đã đọc các bài học nhưng không có gì rõ ràng 🙄Thật khó để tạo ra những tài liệu giáo dục phù hợp với tất cả mọi người. Chúng tôi cố gắng hết sức nhưng luôn có điều gì đó cần cải thiện. Nếu bạn thấy một tài liệu không rõ ràng đối với bạn, hãy mô tả vấn đề trong “Thảo luận”. Sẽ thật tuyệt nếu bạn viết những điểm chưa rõ ràng trong mẫu câu hỏi. Thông thường, chúng tôi cần một vài ngày để sửa chữa
Nhân tiện, bạn có thể tham gia cải tiến các khóa học. Có một liên kết bên dưới đến mã khóa học bài học mà bạn có thể chỉnh sửa ngay trong trình duyệt của mình
Ngôn ngữ lập trình được gõ mạnh là ngôn ngữ trong đó mỗi loại dữ liệu, chẳng hạn như số nguyên, ký tự, số thập lục phân và số thập phân được đóng gói, được xác định trước như một phần của ngôn ngữ lập trình và tất cả các hằng số hoặc biến được xác định cho một chương trình nhất định phải được mô tả bằng một trong . Một số hoạt động nhất định có thể chỉ được phép với các loại dữ liệu cụ thể
Ngôn ngữ lập trình được gõ mạnh đề cập đến một ý tưởng mô tả việc thực thi các hạn chế của công ty đối với việc trộn các loại và giá trị dữ liệu khác nhau. Khi có vi phạm, lỗi, còn được gọi là ngoại lệ, xảy ra. Ngôn ngữ lập trình được gõ mạnh sử dụng trình biên dịch ngôn ngữ để thực thi việc tuân thủ kiểu gõ dữ liệu
Ưu và nhược điểm của ngôn ngữ lập trình kiểu gõ mạnh
Các ngôn ngữ lập trình được gõ mạnh có những lợi ích và hạn chế của chúng
Ưu điểm chính của việc nhập dữ liệu mạnh là nó thực thi một bộ quy tắc nghiêm ngặt để đảm bảo tính nhất quán nhất định của kết quả. Hơn nữa, một trình biên dịch có thể nhanh chóng phát hiện một đối tượng đang được gửi một thông báo mà nó sẽ không phản hồi, ngăn ngừa lỗi thời gian chạy. Các lợi ích khác bao gồm không có hình phạt thời gian chạy để xác định loại, tăng tốc phát triển bằng cách phát hiện lỗi sớm hơn và mã được tối ưu hóa tốt hơn từ trình biên dịch
Tuy nhiên, một nhược điểm lớn của việc sử dụng ngôn ngữ lập trình kiểu gõ mạnh là lập trình viên mất tính linh hoạt. Ví dụ: các ngôn ngữ lập trình được gõ mạnh ngăn lập trình viên phát minh ra một loại dữ liệu không được các nhà phát triển ngôn ngữ lập trình dự đoán. Nó giới hạn mức độ sáng tạo của một người khi sử dụng một loại dữ liệu nhất định. Việc gõ mạnh trong ngôn ngữ lập trình cũng khiến việc xác định các tập hợp các đối tượng không đồng nhất trở nên khó khăn hơn
mạnh mẽ vs. ngôn ngữ lập trình gõ lỏng lẻo
Trong lập trình máy tính, một ngôn ngữ lập trình được gõ mạnh nếu nó yêu cầu đặc điểm kỹ thuật của các kiểu dữ liệu. Một ngôn ngữ lập trình được gõ lỏng lẻo hoặc gõ yếu khi nó không yêu cầu đặc tả rõ ràng của các loại đối tượng và biến khác nhau. Các quy tắc gõ "lỏng lẻo" trong các ngôn ngữ lập trình được gõ yếu có thể tạo ra kết quả sai hoặc không thể đoán trước. Nó có thể thực hiện các chuyển đổi kiểu ẩn trong thời gian chạy
Trong các ngôn ngữ lập trình, các khái niệm gõ mạnh, gõ yếu, gõ lỏng lẻo có liên quan nhưng khác với gõ tĩnh và gõ động. Một ngôn ngữ lập trình được gõ mạnh có thể được gõ tĩnh hoặc động
Trong kiểu gõ tĩnh, việc kiểm tra kiểu diễn ra tại thời điểm biên dịch và nắm bắt những thứ như hàm bị thiếu, đối số kiểu không hợp lệ hoặc sự không khớp giữa giá trị dữ liệu và kiểu biến mà nó được gán -- trước khi chương trình có cơ hội chạy . Trong các ngôn ngữ có kiểu động, việc kiểm tra kiểu diễn ra trong thời gian chạy, vì vậy trình biên dịch sẽ bỏ qua các đối số kiểu không hợp lệ hoặc dữ liệu không khớp. Nếu trình kiểm tra loại phát hiện lỗi, nó sẽ cảnh báo cho nhà phát triển sửa mã để tránh chương trình bị lỗi
Ví dụ về các ngôn ngữ lập trình được gõ mạnh và lỏng lẻo
Dưới đây là một số ví dụ về ngôn ngữ lập trình được gõ mạnh và gõ lỏng lẻo
Các ngôn ngữ lập trình được gõ mạnh bao gồm các ngôn ngữ sau
- C
- C++
- C#
- Java
- pascal
- con trăn
- bản đánh máy
Các ngôn ngữ lập trình được gõ lỏng lẻo bao gồm những điều sau đây
- C
- JavaScript
- perl
- PHP
- hồng ngọc
- vỏ bọc
Tại sao Java là một ngôn ngữ gõ mạnh?
Java được coi là kiểu dữ liệu mạnh vì nó yêu cầu khai báo mọi biến có kiểu dữ liệu. Người dùng không thể tạo một biến mà không có phạm vi giá trị mà nó có thể chứa. Khi đã khai báo thì không thể thay đổi kiểu dữ liệu của biến
Tại sao Python là ngôn ngữ được gõ mạnh?
Python được gõ mạnh vì trình thông dịch theo dõi tất cả các loại biến. Python có thể rất năng động, vì nó hiếm khi sử dụng thông tin này để hạn chế việc sử dụng biến
C là ngôn ngữ lập trình được gõ mạnh hay yếu?
C được gõ mạnh ở chỗ phải chỉ rõ kiểu biến khi khai báo biến. Tuy nhiên, C cũng có thể được coi là kiểu gõ yếu vì người dùng có thể chuyển đổi kiểu dữ liệu thông qua ép kiểu và không gặp lỗi trình biên dịch
Tại sao C ++ là ngôn ngữ lập trình được gõ mạnh?
Ngôn ngữ lập trình C++ được coi là ngôn ngữ được gõ mạnh và có tính đa hình tham số có sẵn thông qua các mẫu. Điều này có nghĩa là bạn có thể tạo một tập hợp các loại dữ liệu chung và thể hiện chúng một cách chính xác
Tại sao C# là ngôn ngữ lập trình được gõ mạnh?
C# là ngôn ngữ lập trình được gõ mạnh vì tất cả các loại biến phải được chỉ định và tất cả các lỗi được phát hiện và gắn cờ trong quá trình biên dịch
Tại sao JavaScript là ngôn ngữ lập trình được gõ yếu?
Không giống như C#, JavaScript là ngôn ngữ lập trình được gõ yếu vì bạn không phải chỉ định trước loại biến
Khám phá các ngôn ngữ lập trình đã chết mà chúng ta không bao giờ nên quên và so sánh các ngôn ngữ lập trình hàng đầu
Thông tin này được cập nhật lần cuối vào Tháng 6 năm 2022
ĐỌC TIẾP Về ngôn ngữ lập trình được gõ mạnh
- Các nhà phát triển ngôn ngữ lập trình theo yêu cầu nên biết
- Khắc phục 10 ví dụ phổ biến về RuntimeException trong Java
- Sửa 10 lỗi thời gian biên dịch phổ biến nhất trong Java
- Thuốc generic Golang khơi dậy sự phấn khích, lo lắng khi phát hành đầu nguồn
- Áp dụng các phương pháp hay nhất về chính sách dưới dạng mã để thu được lợi ích
Điều khoản liên quan
giao diện lập trình ứng dụng [API]Giao diện lập trình ứng dụng [API] là mã cho phép hai chương trình phần mềm giao tiếp với nhau. Xem định nghĩa đầy đủ về luật Hofstadter Luật Hofstadter quy định rằng một dự án luôn mất nhiều thời gian hơn dự kiến, ngay cả khi luật được tính đến. Xem ứng dụng định nghĩa đầy đủ Ứng dụng gốc là một chương trình phần mềm mà nhà phát triển xây dựng để sử dụng trên một nền tảng hoặc thiết bị cụ thể. Xem định nghĩa đầy đủTừ trong ngày
từ điển dữ liệu
Từ điển dữ liệu là tập hợp các mô tả về đối tượng dữ liệu hoặc mục trong mô hình dữ liệu mà người lập trình và những người khác có thể tham khảo