36

Ai đó có thể cho tôi biết những gì gõ mạnh mẽ và đánh máy yếu có nghĩa là và cái nào tốt hơn?Ai đó có thể cho tôi biết những gì gõ mạnh mẽ và đánh máy yếu có nghĩa là và cái nào tốt hơn?

+2

Xem thêm: http://stackoverflow.com/questions/2351190/static-dynamic-vs-strong-weak, http://stackoverflow.com/questions/2135066/is-my-understanding-of-type- hệ thống chính xác – outis

+0

Hầu hết các câu trả lời ở đây đều không chính xác. Xem: http://stackoverflow.com/questions/2351190/static-dynamic-vs-strong-weak – darksky

Trả lời

-2

Nhập sai có nghĩa là bạn không chỉ định loại biến là gì và việc nhập mạnh có nghĩa là bạn cung cấp loại nghiêm ngặt cho từng biến.

Từng ưu điểm của nó, với việc gõ yếu (hoặc gõ động, vì nó thường được gọi), linh hoạt hơn và đòi hỏi ít mã hơn từ lập trình viên. Đánh máy mạnh, mặt khác, đòi hỏi nhiều công việc hơn từ nhà phát triển, nhưng bù lại nó có thể cảnh báo bạn về nhiều sai lầm khi biên dịch mã của bạn, trước khi bạn chạy nó. Nhập động có thể làm chậm sự phát hiện của các vấn đề đơn giản này cho đến khi mã được thực thi.

Tùy thuộc vào nhiệm vụ trong tầm tay, việc nhập liệu yếu có thể tốt hơn gõ mạnh hoặc ngược lại, nhưng chủ yếu là vấn đề về sở thích. Lỗi gõ thường được sử dụng trong các ngôn ngữ kịch bản, trong khi gõ mạnh được sử dụng trong hầu hết các ngôn ngữ biên dịch.

+4

-1 để gõ nhầm lẫn gõ động. –

14

"Nhập mạnh" và ngược lại "gõ nhẹ" khá yếu về ý nghĩa, một phần vì khái niệm về cái được coi là "mạnh" có thể thay đổi tùy thuộc vào người bạn yêu cầu. Ví dụ. C đã được gọi là "gõ mạnh" và "gõ nhẹ" bởi các tác giả khác nhau, nó thực sự phụ thuộc vào những gì bạn so sánh nó với.

Nói chung một hệ thống kiểu nên được coi là mạnh hơn nếu nó có thể thể hiện những ràng buộc giống nhau như một và nhiều hơn nữa. Khá thường là hai loại hệ thống không thể so sánh, mặc dù - một trong những có thể có các tính năng thiếu khác và ngược lại. Bất kỳ cuộc thảo luận về thế mạnh tương đối là sau đó lên đến hương vị cá nhân.

Có hệ thống kiểu mạnh hơn có nghĩa là trình biên dịch hoặc thời gian chạy sẽ báo cáo nhiều lỗi hơn, thường là một điều tốt, mặc dù nó có thể có chi phí phải cung cấp thêm thông tin loại theo cách thủ công. không đáng giá. Tôi sẽ yêu cầu "gõ mạnh" nói chung là tốt hơn, nhưng bạn phải nhìn vào chi phí.

Cũng rất quan trọng để nhận ra rằng "được nhập mạnh" thường được sử dụng không đúng thay vì "nhập tĩnh" hoặc thậm chí là "tệp kê khai". "Được nhập tĩnh" có nghĩa là có các loại kiểm tra tại thời gian biên dịch, "tệp kê khai" có nghĩa là các loại được khai báo một cách rõ ràng. Manifest-đánh máy có lẽ là cách tốt nhất để làm cho một hệ thống kiểu mạnh hơn (nghĩ Java), nhưng bạn có thể thêm sức mạnh bằng các phương tiện khác như kiểu suy luận.

51

Đó sẽ là câu trả lời thuyết đưa về chăm sóc, nhưng bên thực hành dường như đã bị lãng quên ...

Strong-gõ có nghĩa là bạn không thể sử dụng một loại biến nơi khác dự kiến ​​(hoặc có những hạn chế để làm như vậy). Yếu gõ có nghĩa là bạn có thể kết hợp các loại khác nhau. Trong PHP ví dụ, bạn có thể kết hợp các số và chuỗi và PHP sẽ không phàn nàn vì nó là một ngôn ngữ đánh máy yếu.

$message = "You are visitor number ".$count; 

Nếu nó được gõ mạnh mẽ, bạn sẽ phải chuyển đổi $ count từ một số nguyên cho một chuỗi, thường với một trong hai với đúc:

$message = "you are visitor number ".(string)$count; 

... hoặc một chức năng:

$message = "you are visitor number ".strval($count); 

Vì điều đó tốt hơn, đó là chủ quan. Những người ủng hộ gõ mạnh sẽ cho bạn biết rằng nó sẽ giúp bạn tránh được một số lỗi và/hoặc lỗi và giúp truyền đạt mục đích của một biến vvHọ cũng sẽ cho bạn biết rằng những người ủng hộ gõ chữ yếu sẽ gọi mạnh mẽ gõ "fluff ngôn ngữ không cần thiết được hiển thị vô nghĩa theo nghĩa thông thường" hoặc tương tự. Là thành viên mang thẻ của nhóm đánh máy yếu, tôi phải nói rằng họ đã có số của tôi ... nhưng tôi cũng có số của họ và Tôi có thể đặt nó trong một chuỗi :)

+16

"và * I * có thể đặt trong chuỗi" đẹp. 1 cho bên yếu của lực lượng – annakata

+2

"Nhập mạnh có nghĩa là bạn không thể sử dụng một loại biến mà người khác mong đợi". Mạnh/yếu không phải về biến, chúng là về giá trị. Tôi nghĩ bạn nên nói: "Nhập mạnh có nghĩa là bạn không thể sử dụng một loại giá trị * * mà người khác được mong đợi". –

+1

Bạn đang bối rối * gõ tĩnh * và * gõ mạnh *. "Truyền đạt mục đích của một biến" là * gõ tĩnh *. "Fluff ngôn ngữ không cần thiết" là * gõ tĩnh *. Tránh lỗi chủ yếu là * gõ tĩnh *, nhưng gõ mạnh cũng giúp ích ở đây, do đó, một nửa số điểm. –

5

Tôi muốn nhắc lại rằng gõ yếu là không phải giống với nhập động.

Đây là một bài viết khá tốt về chủ đề và tôi chắc chắn sẽ khuyên bạn nên đọc nó nếu bạn không chắc chắn về sự khác biệt giữa hệ thống loại mạnh, yếu, tĩnh và động. Nó chi tiết sự khác biệt tốt hơn nhiều so với dự kiến ​​trong một câu trả lời ngắn, và có một số ví dụ rất khai sáng.

http://en.wikipedia.org/wiki/Type_system

1

Bài viết này là một đọc lớn: http://blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html dọn dẹp lên rất nhiều thứ cho tôi khi nghiên cứu đang cố gắng để trả lời một câu hỏi tương tự, hy vọng những người khác tìm thấy nó hữu ích quá.

Mạnh và Yếu Typing:

Có lẽ cách phổ biến nhất hệ thống loại được phân loại là "mạnh" hay "yếu". Điều này thật không may, vì những từ này gần như không có ý nghĩa gì cả. Ở một mức độ hạn chế, có thể so sánh hai ngôn ngữ với các hệ thống kiểu rất giống nhau và chỉ định một hệ thống có số mạnh hơn của hai hệ thống đó. Ngoài ra, các từ có nghĩa là không có gì là .

tĩnh và động loại

này rất gần việc phân loại chung duy nhất của hệ thống loại có ý nghĩa thực sự. Như một vấn đề của thực tế, nó có ý nghĩa là thường xuyên theo ước tính [...] Hệ thống kiểu động và tĩnh là hai điều hoàn toàn khác nhau, có mục tiêu xảy ra một phần trùng lặp.

Một hệ thống kiểu tĩnh là một cơ chế mà theo đó một trình biên dịch kiểm tra mã nguồn và gán nhãn (gọi là "loại") để miếng của cú pháp , và sau đó sử dụng chúng để suy ra điều gì đó về hành vi của chương trình . Một hệ thống kiểu động là một cơ chế mà theo đó trình biên dịch tạo mã để theo dõi các loại dữ liệu (tình cờ, cũng được gọi là "loại") được chương trình sử dụng. Việc sử dụng cùng một từ "loại" trong mỗi hai hệ thống này, tất nhiên, không thực sự hoàn toàn trùng hợp ngẫu nhiên; nhưng nó được hiểu rõ nhất là có một loại yếu tố quan trọng lịch sử . Kết quả nhầm lẫn lớn từ việc cố gắng tìm một chế độ xem thế giới trong đó "loại" thực sự có nghĩa là cùng một điều trong cả hai hệ thống . Nó không.

Explicit/Loại Ngầm định:

Khi những thuật ngữ này được sử dụng, họ đề cập đến mức độ mà một trình biên dịch sẽ suy luận về các loại tĩnh của các bộ phận của một chương trình. Tất cả các ngôn ngữ lập trình có một số hình thức lý luận về các loại.Một số có nhiều hơn những người khác. ML và Haskell có các loại tiềm ẩn, trong đó không có (hoặc rất ít, tùy thuộc vào ngôn ngữ và tiện ích mở rộng đang sử dụng), cần loại khai báo . Java và Ada có các loại rất rõ ràng và một loại liên tục khai báo các loại sự vật. Tất cả những điều trên có (tương đối so với C và C++ chẳng hạn) loại tĩnh mạnh hệ thống.

4

Kiểu nhập mạnh là kiểu phổ biến nhất trong ngôn ngữ lập trình hiện đại. Các ngôn ngữ đó có một tính năng đơn giản - biết về các giá trị kiểu trong thời gian chạy. Chúng ta có thể nói rằng các ngôn ngữ gõ mạnh mẽ ngăn chặn các hoạt động trộn giữa hai hoặc nhiều loại khác nhau của các loại. Dưới đây là một ví dụ trong Java:

String foo = "Hello, world!"; 
Object obj = foo; 

String bar = (String) obj; 
Date baz = (Date) obj; // This line will throw an error 

Ví dụ trước đây sẽ làm việc hoàn toàn tốt cho đến khi chương trình nhấn dòng cuối cùng của mã nơi ClassCastException sẽ được ném bởi vì Java là ngôn ngữ lập trình mạnh mẽ đánh máy.

Khi chúng tôi nói về yếu được nhập ngôn ngữ, Perl là một trong số đó. Ví dụ sau đây cho thấy Perl không có bất kỳ vấn đề gì với việc trộn lẫn hai loại khác nhau.

$a = 10; 
$b = "a"; 
$c = $a . $b; 
print $c; # returns 10a 

Tôi hy vọng bạn thấy hữu ích,

Cảm ơn này.

1

mạnh gõ/yếu bằng một ngôn ngữ có liên quan đến cách dễ dàng bạn có thể làm kiểu chuyển đổi:

Ví dụ bằng Python:

str = 5 + 'a' 
# would throw an error since it does not want to cast one type to the other implicitly. 

đâu như trong ngôn ngữ C:

int a = 5; 
a = 5 + 'c'; 
/* is fine, because C treats 'c' as an integer in this case */ 

Do đó Python được đánh máy mạnh hơn C (từ góc nhìn này).

0

Có thể điều này có thể giúp bạn hiểu kiểu mạnh và kiểu yếu .......

mạnh gõ: Nó kiểm tra các loại biến càng sớm càng tốt, thường là tại thời gian biên dịch. Nó ngăn chặn các hoạt động trộn giữa các loại không khớp.

Một ngôn ngữ lập trình mạnh mẽ, đánh máy là một trong đó:

  • Tất cả các biến (hoặc các loại dữ liệu) được biết tại thời gian biên dịch
  • Có thực thi nghiêm ngặt gõ quy tắc (một String không thể là sử dụng nơi một Integer sẽ được dự kiến)
  • Tất cả các ngoại lệ đối với quy tắc gõ kết quả trong một lỗi thời gian biên dịch

yếu Typ ing: Trong khi gõ yếu là trì hoãn kiểm tra các loại của hệ thống càng muộn càng tốt, thường là thời gian chạy. Trong này, bạn có thể kết hợp các loại mà không cần chuyển đổi rõ ràng.

Ngôn ngữ lập trình "được nhập sai" chỉ đơn giản là ngôn ngữ không được nhập mạnh.

được ưu tiên tùy thuộc vào những gì bạn muốn. cho các tập lệnh và nội dung hay, bạn thường sẽ muốn gõ nhẹ, vì bạn muốn viết ít mã hơn nhiều nhất có thể. trong các chương trình lớn, gõ mạnh có thể làm giảm thời gian biên dịch.

Các vấn đề liên quan