2010-03-11 7 views
5

Với Java ở một bên và Ruby/Groovy ở bên kia, tôi biết rằng trong trại thứ hai, tôi tự do mắc lỗi chính tả mà sẽ không bị bắt trước khi chạy. Điều này có đúng với tất cả các ngôn ngữ được nhập động không?Tất cả ngôn ngữ động có thân thiện với người dùng không?

Chỉnh sửa: Tôi đã được yêu cầu xây dựng trên loại lỗi đánh máy. Trong Ruby và trong Groovy, bạn có thể gán cho một biến với một tên ngẫu nhiên không bao giờ được đọc. Bạn có thể gọi các phương thức không tồn tại (rõ ràng là các bài kiểm tra của bạn nên bắt được nó, nó được nói). Bạn có thể tham khảo các lớp không tồn tại, v.v. Về cơ bản, bất kỳ cú pháp hợp lệ nào, ngay cả với lỗi đánh máy, đều hợp lệ trong cả Ruby và Groovy.

+1

Bạn có thể muốn giải thích về loại lỗi đánh máy, cụ thể là nơi nó xảy ra. – NomeN

+2

Ý của bạn là - cho đến khi thời gian chạy? –

+6

Bạn dường như xem xét "thân thiện" là "không phàn nàn khi tôi thực hiện một lỗi đánh máy cho đến khi nó cần phải được thực hiện". Tôi nghĩ rằng định nghĩa ngược lại tốt hơn. Trình thông dịch "thân thiện" là một trình phân tích cú pháp và mã và tìm kiếm lỗi chính tả và cung cấp cho tôi một lỗi trước khi thực thi thực tế. – shoosh

Trả lời

3

Trong Perl, nếu bạn khai báo use strict trong mã của mình, thì bạn phải khai báo biến của mình với my. Typos trong các tên biến sẽ bị bắt tại thời gian biên dịch. Đây là một trong những điều lớn nhất tôi nhớ khi viết bằng Python.

+0

Nhân tiện, tôi nghĩ ' sử dụng nghiêm ngặt' làm cho khả năng sử dụng của Perl tốt hơn nhiều so với cách khác. :) –

+0

Điều lạ lùng nhất về tất cả điều này là, không phải là có một tùy chọn để làm điều đó trong QuickBasic hoặc có thể là những Khái niệm cơ bản về hình ảnh ban đầu? Nhấn mạnh rằng bạn muốn sử dụng các loại? –

+0

@yar: Bạn không khăng khăng sử dụng các loại. Bạn đang nhấn mạnh vào việc sử dụng khai báo biến. Loại biến không có gì liên quan đến việc bạn đánh vần sai tên của nó hay không. Fortran là một ngôn ngữ được đánh máy mạnh mẽ cho phép bạn tránh khai báo các biến. Bạn cần 'IMPLICIT NONE' ở trên cùng, giống như 'use strict' của Perl. Nếu bạn không sử dụng 'IMPLICIT NONE', bạn có thể tạo lỗi chính tả với tên biến của mình dễ dàng như trong ngôn ngữ động. –

2

Đối với hầu hết các phần, có. Nhập động và không yêu cầu khai báo biến là các thuộc tính ngôn ngữ thường được tìm thấy cùng nhau.

Tuy nhiên, chúng không liên quan đến vốn có. Một ngôn ngữ có thể dễ dàng gõ động trong khi yêu cầu tên biến phải được khai báo trước khi sử dụng. Như ire_and_curses đề cập, điều này có thể đạt được trong Perl thông qua chỉ thị "sử dụng nghiêm ngặt".

+2

Cách khác cũng xảy ra - Mục tiêu C là các tên phương thức động: nhưng các quy tắc khai báo biến là của C. –

+0

Câu trả lời hay. Tôi nghĩ rằng đó là sự thật cho những thứ khác, và không chỉ khai báo biến. Câu hỏi của tôi là, ngoài SmallTalk, bộ quy tắc ngôn ngữ động lớn nhất là gì? Scala? –

+0

Tôi không phải là một lập trình viên Scala nhưng sự hiểu biết của tôi là Scala không phải là một ngôn ngữ động bởi hầu hết các định nghĩa. –

2

Đây là những gì xảy ra khi tôi cố gắng đi vào những cạm bẫy mà bạn đã đề cập trong SqueakDolphin, hai cách triển khai ngôn ngữ động Smalltalk 80.

Bạn có thể gán cho một biến với một cái tên ngẫu nhiên mà không bao giờ được đọc

Ngôn ngữ Smalltalk đòi hỏi nhiệt độ và dụ các biến được khai báo. Nếu tôi cố gắng biên dịch một phương thức có chứa một biến không xác định, tôi nhận được một lỗi biên dịch thời gian.

| anArray | 
anArrray := Array with: 2 with: 1. "Unknown variable anArrray" 

biến Tạo động không phải là một cái gì đó ngôn ngữ động phải cho phép. Có sự khác biệt giữa các khai báo không cần thiết và không có khai báo nào cả.


Bạn có thể gọi các phương thức không tồn tại

Vấn đề biên dịch một cảnh báo nếu bạn sử dụng một selector (ví dụ: phương pháp tên) đó là hoàn toàn vô danh.

Trình biên dịch sẽ không bận tâm nếu tôi gọi phương thức paint trên một mảng vì có một lớp khác trong hệ thống đang triển khai paint. Lỗi đó sẽ chỉ bị bắt khi chạy.

Nếu tuy nhiên tôi gọi phương thức sortt (trong khi tôi định gọi sort) trình biên dịch tạo cảnh báo. Khi phát triển từ trên xuống, bạn có thể tiến hành vượt qua các cảnh báo này.

| anArray | 
anArray := Array with: 2 with: 1. 
anArray paint. "Runtime error. You can't paint an array but perhaps a Shape" 
anArray sortt. "Compile-time warning" 

bạn có thể tham khảo các lớp học không tồn tại

này không được phép. Mặc dù trong Squeak bạn có thể nhanh chóng tạo ra một lớp mới từ hộp thoại báo lỗi nếu cần thiết.

+0

Hấp dẫn. Tôi không biết liệu Smalltalk có phổ biến hay không, nhưng tôi nghe về nó trên tất cả các câu hỏi ngôn ngữ năng động của tôi :) –

3

Python là typo-friendly theo cách bạn mô tả trong câu hỏi của mình.

Nhưng điều này không có nghĩa là những 'lỗi chính tả' này có thể chỉ bị chặn @ thời gian chạy. Khi sử dụng trình phân tích mã như pylint (lý tưởng được tích hợp vào môi trường phát triển của bạn), bạn sẽ bắt được 'nhiều nhất' trong số này một cách nhất quán trước khi nhấn 'chạy'.

+0

Thật sao? Đó là gọn gàng, tôi không biết điều đó. Trong Ruby không có thứ gì cả, tôi nghĩ vậy. Netbeans bắt một vài điều, nhưng nó bị nhầm lẫn khá nhanh chóng –

+0

Một số công cụ tồn tại theo câu hỏi này (http://stackoverflow.com/questions/286564/can-anyone-recommend-a-ruby-source-code-analyzer-something -như-pylint) mặc dù không có công cụ nào trong số các công cụ được đề cập này có vẻ như đầy đủ tính năng như pylint tại thời điểm này. – ChristopheD