Các thủ thuật ấn tượng nhất mà IDE có thể thực hiện với mã là gì? [đóng cửa]


18

Các IDE hiện đại có rất nhiều mánh khóe để giúp viết mã, tái cấu trúc, tìm kiếm. Tất cả những thứ đó đều rất hữu ích, nhưng hiếm khi bất kỳ thứ nào trong số chúng trông giống như một "ma thuật" thực sự và khiến tôi nghĩ "Wow! Làm thế nào mà nó phát hiện ra điều đó?"

Bạn có thể đặt tên cho bất kỳ tính năng tự động hóa mã IDE ấn tượng (hoặc khác) nào làm bạn suy nghĩ lần đầu tiên khi bạn nhìn thấy chúng không?


3
Câu hỏi hay, rất thích xem thêm câu trả lời mặc dù ... Bounty!
Tamara Wijsman

Tôi không biết liệu đây có phải là một câu trả lời không, nhưng tại sao tôi không thấy bất kỳ đề cập nào về IntelliJ IDEA ?
Đánh dấu C

5
Lập trình viên thực sự sử dụng bướm.
đúng

Ngăn tôi tạo lỗi;)
Travis Christian

không nên đóng cửa, đây là câu hỏi hoàn hảo ở đây,
imho

Câu trả lời:


29

Gỡ lỗi ngược

Visual Studio 2010 (và bây giờ là 2012) cho phép tôi gỡ lỗi ngược với IntelliTrace.

Tôi sẽ không bao giờ phải sống lại khoảnh khắc tôi nhấn F10 quá nhiều lần và phải khởi động lại gỡ lỗi.


2
Tôi chưa sử dụng cái này bao giờ, nhưng tôi muốn.
HỎI

Tôi cũng không sử dụng cái này (tôi sử dụng RAD Studio cho Delphi), nhưng có vẻ như giấc mơ trở thành sự thật. (Nhưng đây có phải là một câu trả lời hợp lệ cho câu hỏi này không? Đây là một tính năng gỡ lỗi hơn là một tính năng soạn thảo mã. Chà, nó là một phần của IDE, vì vậy có lẽ ...)
Andreas Rejbrand

+1000: Điều này rất hữu ích.
Callum Rogers

Nó có lệnh COME TỪ không? :)
Joonas Pulakka

2
vấn đề là bạn chỉ có thể làm điều này với các ngôn ngữ MS (được quản lý) chứ không phải với C ++, chẳng hạn
Mở đường

16

Hoàn thành mã

Khi tất cả những gì bạn thấy là một trình soạn thảo văn bản, điều này thật ấn tượng


3
Không thực sự tất cả những gì ấn tượng, bạn có thể làm điều đó chỉ bằng cách phân tích một file TAGS.
thay thế

2
Những gì tôi như là hippie-mở rộng ... nó là sâu sắc hữu ích với tôi hơn hoàn thành mã.
Paul Nathan

2
@mathepic Và chính xác có bao nhiêu người biết làm điều đó?
TheLQ

2
Thật ấn tượng nếu bạn đã lập trình từ những ngày máy tính lớn.
HỎI

4
Các bạn, nếu bạn không thấy câu trả lời này hấp dẫn, thay vào đó hãy bỏ phiếu cho một câu trả lời khác, thay vì không đồng ý trong các bình luận. Đó là một câu hỏi chủ quan, vì vậy câu trả lời cho có thể sẽ là quá.
JBRWilkinson

16

ReSharper khả năng đoán những gì tôi muốn có một biến tên là tiếp tục làm tôi ngạc nhiên. Đây là một ví dụ rất đơn giản nhưng bạn có được ý tưởng.

văn bản thay thế


1
Bạn có thể vui lòng đưa ra một số ví dụ cho những người chưa bao giờ thấy nó hoạt động (tôi)
serg

9
Nếu trình soạn thảo văn bản của bạn có thể thay thế bạn bằng cách viết mã, tôi có một số tin xấu ...
P Shved

3
foreach(var matche in regex.Matches(str)). Cũng đặt matchenhư là một objectchứ không phải là Matchrất hữu ích.
Callum Rogers

1
@Callum: Đúng, nhưng đó chỉ là vì MatchCollectionmột bộ sưu tập chưa được chỉnh sửa. Đối với bộ sưu tập thích hợp, varcông trình tuyệt vời. (Tôi vẫn không thích mặc dù vậy)
cấu hình

1
đây cũng là một tính năng trong nhật thực
NimChimpsky

12

Tôi đã rất ấn tượng với các công cụ tái cấu trúc của Eclipse khi lần đầu tiên chúng bắt gặp chúng. Khả năng trích xuất các phương thức (mà khi bạn học thiết kế tốt hơn là một sự xuất hiện phổ biến) từ một đoạn mã lớn và mọi thứ được xử lý đối với tôi đều khá tuyệt.


12

Mã bong bóng. http://www.andrewbragdon.com/codebubbles_site.asp

Tôi yêu Visual Studio và Eclipse vì các công cụ họ cung cấp cho tôi để thay đổi mã, nhưng Code Bubbled thực sự khiến tôi phấn khích vì có thể điều hướng và xem mã của mình. Quá xấu nó không phải công bố rộng rãi = - {


2
Ồ Video đó ... Tôi đang chảy nước dãi. Tôi có thể có điều này cho C ++, xin vui lòng?
SBI

Tôi không thể nói gì ngoài wow.
Icode4food

1
+1 Mặc dù tôi không thích GUI hiện tại, nhưng bản thân khái niệm này khá tuyệt vời ...
Tamara Wijsman

nó thực sự hoạt động? hộp nhỏ với một phần của mã. Để sử dụng nó, bạn sẽ cần màn hình có kích thước của một bức tường.
IAdapter

Tôi hy vọng điều này không bao giờ được thực hiện trong Emacs. Trái hồng của tôi sẽ không như thế.
rightfold

7

Môi trường lập trình ấn tượng nhất mà tôi từng nghe là hệ điều hành Genera.

Bạn có thể nhấp vào bất kỳ tiện ích nào trong hệ thống cửa sổ và nhận được toàn bộ mã nguồn & tài liệu của mục đó. Là ngôn ngữ lập trình động (Lisp), bạn có thể chỉnh sửa nguồn của tiện ích một cách nhanh chóng.

ZMACS từ thế giới Lisp Machine vẫn được cho là một trình soạn thảo tốt hơn Emacs, một môi trường biên tập không có ngang hàng.


Việc tính toán đầu tiên của tôi sau khi ra trường đã làm việc với một máy trạm biễu tượng (sử dụng chi), tin tôi có một lý do nó không bắt trên!
FinnNk

3
Oh, làm xây dựng!
Đánh dấu C

vâng, Id muốn biết tại sao Genera cũng không bắt kịp
Yazz.com 15/03/2016

@FinnNk: Có lẽ bạn có thể xây dựng?
Paul Nathan

6

Hiển thị trực quan cấu trúc của chương trình (chương trình / chức năng / thói quen / ...)

văn bản thay thế


Đó là biên tập viên nào?
Paul Nathan


Thật không may ... (Bạn đã nhận được thư vào đúng thời điểm bạn chụp ảnh màn hình.) Nhưng đây không phải là một tính năng rất tiên tiến. Chắc chắn, nó có thể rất hữu ích, nhưng không "ấn tượng" lắm (tất cả).
Andreas Rejbrand

@Andreas Rejbrand - Xin lỗi Andreas, nhưng thư gì? Ảnh chụp màn hình gì? Tôi sợ tôi không hiểu những gì bạn đang nói về.
Rook

@Rook: Anh ấy đang nói về hình ảnh trong câu trả lời của bạn và ô nhỏ màu xanh ở phía dưới bên phải dường như là một thông báo email từ Outlook. . .
Tim Goodman

4

Khả năng tái cấu trúc của ReSharper. Trong sự tiết lộ đầy đủ, tôi có thể đứng sau đường cong ở đây vì tôi nghĩ Java với Eclipse đã có loại chức năng này một thời gian, nhưng tôi không thường xuyên làm việc với Java.

Khả năng mà ReSharper thêm vào Visual Studio là rất lớn, thật không thể tin được. Tôi biết tôi nghe giống như một quảng cáo, nhưng tôi không nghĩ mình có thể quay lại sử dụng bản cài đặt Visual Studio mà không cần ReSharper trên đầu.

Tổng quát hơn, một sự hiểu biết ngữ nghĩa về mã sẽ đánh bật quần của một trình soạn thảo văn bản cũ đơn giản bất cứ ngày nào. Điều này dẫn đến những thứ như "tìm cách sử dụng biến" hoặc "hàm nội tuyến" hoặc "cơ hội sử dụng mẫu thành ngữ", v.v.


Tôi đã được nói một lần tại nơi làm việc, "Bạn bè đừng để bạn bè lập trình mà không có ReSharper."
Frank Shearar

4

Trình gỡ lỗi của Smalltalk:

  • Toàn quyền truy cập vào toàn bộ ngăn xếp cuộc gọi (Biến thể này của đối tượng 3 người gửi xuống ngăn xếp đó là gì?)
  • Chỉnh sửa mã đang được kiểm tra trong trình gỡ lỗi, khởi động lại và thực hiện chương trình như không có gì xảy ra.

Việc Smalltalk dành phần lớn thời gian để viết mã từ bên trong trình gỡ lỗi là điều hoàn toàn bình thường.

(Tôi nhớ bị thổi bay đi bằng cách chạy một phương pháp, nhìn thấy một cái gì đó sai, thay đổi nó, và chạy phương pháp này một lần nữa mà không cần khởi động lại trở lại ứng dụng trong ngày với Visual Age cho Java ... vì VA4J được viết bằng Visual Age cho Smalltalk.)

Công cụ tìm phương thức của Smalltalk

Phương thức Finder cho phép bạn hỏi "tôi có thể gửi thông điệp nào để nhận các tham số này và nhận kết quả này?" Hỏi đi'abc'. 'def'. 'abcdeb'. và nó nói với bạn 'abc' , 'def' --> 'abcdef'. Hỏi nó #(0 1 2 3)và nó nói #(0 1 2 3) sum --> 6. * Người gửi - của, người triển khai - của tất cả các bạn để tìm tất cả (*) người gửi thư hoặc tất cả các đối tượng triển khai thư đó.

(*) Trừ khi bạn làm công cụ như tạo tên thông báo ở runtime: self perform: (#foo, #bar)gửi cho mình thông điệp #foobar- trong trường hợp bạn biết những gì bạn đang làm, và bạn không nhớ tiềm năng của cẩu mình trên pháo của riêng bạn.


4

Tại sao

Tại sao cho Java thực sự gây ấn tượng với tôi khi tôi nhìn thấy nó. Đây là một công cụ phân tích động cho phép bạn đặt câu hỏi về đầu ra của chương trình, và không chỉ văn bản, mà cả đồ họa. Ví dụ: bạn có thể hỏi "tại sao dòng đó có màu đỏ?" hoặc "tại sao phương pháp sơn không được gọi?"

Nó hoạt động bằng cách ghi lại chương trình của bạn và ghi lại một lần chạy. Ví dụ: giả sử có một lỗi bạn có thể tái tạo. Bạn kết nối chương trình của mình với Whyline, chạy chương trình của bạn trong Whyline để tạo lại lỗi và sau đó khi bạn thoát khỏi chương trình, bạn có thể sử dụng Whyline để kiểm tra lịch sử thực hiện.

Bản ghi và phát lại này không mới, nhưng Whyline thực hiện nó khá lắt léo. Bạn có thể xem lịch sử theo các sự kiện cụ thể (ví dụ: chỉ tập trung vào các sự kiện kéo chuột hoặc chỉ các sự kiện nhấn phím). Nó cũng liên kết đầu ra với phần nào của chương trình đã in nó, vì vậy bạn có thể điều hướng từ đầu ra đến mã.

Để làm việc, nó sử dụng chương trình cắt, để bạn có thể tập trung vào các phần của mã thực sự có liên quan. CMU hiện có bằng sáng chế về nó và tôi không biết kế hoạch của họ là gì, nhưng tôi hy vọng chúng ta có thể thấy nhiều hơn trong sản xuất. Đó là một con heo nhớ, nhưng đó có thể là vì nó là nguyên mẫu và nó có thể cải thiện.

Bạn nên xem bản demo trực tuyến, nhưng bạn cũng nên tự mình dùng thử để có được trải nghiệm đầy đủ. Nếu bất cứ điều gì, các bản demo trực tuyến nhấn mạnh ý tưởng.


3

Tôi nghĩ rằng tính năng IDE ấn tượng nhất mà tôi đã thấy là SyncEdit , mà AFAIK chỉ có trong Delphi.


Đây không phải là đổi tên thành viên sao? Nhật thực hiện việc này tại chỗ. Chỉnh sửa: Ồ tôi hiểu rồi, bạn có thể làm điều đó trong một lựa chọn.
Matt Olenik

1
Eclipse cũng có nó (sử dụng nó mọi lúc). Hữu ích - rất. Magical - không chắc chắn lắm.
serg

@Serg: Ồ, Eclipse cũng vậy à? Tôi sẽ không biết; Tôi không sử dụng Java. Tôi biết VS không có nó ...
Mason Wheeler

@Matt: Bạn có thể thực hiện nó trong một lựa chọn và bạn có thể thực hiện nó trong một lựa chọn, bạn có thể thực hiện nó nhiều như bạn muốn. Nó không bị giới hạn bởi phạm vi hoặc các ràng buộc khác mà trình phân tích cú pháp tái cấu trúc sẽ đặt vào việc đổi tên thành viên.
Mason Wheeler

Netbeans cũng có điều này. Thường là ctrl-r.
Alan Pearce

2

Những gì tôi muốn thấy trong một IDE là các tính năng này:

  • Hiển thị mã theo cách tôi đã sử dụng (độc lập với cách nó thực sự được định dạng)
  • Cho phép nhúng các bảng (giả sử một bảng tính Excel trong đó tôi có thể đọc các giá trị ô sheet[A3]) và các bản vẽ trong mã và truy cập chúng giống như bất kỳ biến nào.
  • Cho phép bỏ qua dấu ngoặc nhọn và mã không cần thiết khác chỉ có ở đó để làm cho phân tích cú pháp hạnh phúc.
  • Tìm kiếm mã bằng công cụ giống như Google (đặc biệt là nhận kết quả tìm kiếm trong vòng 35ms)
  • Hiển thị các ifđiều kiện phức tạp theo cách giống như bảng (vẫn đang tìm kiếm liên kết).
  • Các công cụ tái cấu trúc có thể tìm thấy mã tương tự, trích xuất sự khác biệt và giảm chúng đến mức tối đa.
  • Hỗ trợ tạo mã trong khi tuân theo các quy tắc ngôn ngữ (nghĩ: Tạo tất cả các getters và setters cho các lớp Java trừ khi một phương thức có cùng tên đã tồn tại hoặc phụ thuộc vào các chú thích)

"Tạo tất cả các getters và setters cho các lớp Java trừ khi một phương thức có cùng tên đã tồn tại" Tôi nghĩ nhật thực thực hiện điều đó ...
Hila

Các mục tiêu tương thích "Hiển thị mã theo cách tôi đã sử dụng" và "Cho phép bỏ qua dấu ngoặc nhọn"?
TRiG

@Hila: Có nhưng mã được nhìn thấy . Điều tôi muốn là trình biên dịch chỉ tạo ra chúng khi nó biên dịch nguồn Java; Tôi không muốn họ làm lộn xộn nguồn.
Aaron Digulla

@TRiG: IMHO, có sự chồng chéo lớn giữa hai người. Tôi thụt tất cả mã của tôi; niềng răng hoàn toàn vô dụng.
Aaron Digulla

Nếu, có lẽ, IDE lưu niềng răng nhưng không hiển thị chúng, điều đó có thể hoạt động.
TRiG

2

Loại kiểm tra ngôn ngữ động

Miễn là mã của bạn không nhận được quá nhiều 'meta', một IDE cho Ruby hoặc Python sẽ có thể chạy một tác vụ nền:

  • đối với một hàm đã cho, xác định tất cả các lớp có thể sẽ được truyền vào dưới dạng đối số
  • đối với các lớp đó, đảm bảo chúng đáp ứng với tất cả các phương thức được gọi bởi hàm đó
  • trình bày danh sách các lớp không tương thích với các phương thức còn thiếu bạn cần thực hiện

Tôi chưa thấy một IDE làm điều này.


Bạn có nghĩa là bạn chưa thấy IDE R / P thực hiện điều này hay bất kỳ IDE nào nói chung?
Đánh dấu C

Tôi chưa từng thấy điều này ở bất cứ đâu, nhưng tôi cũng không thực sự khó khăn.
AShelly

Roel Wyts 'RoelTyper và Lex Spoon's Chuck đã làm / thực hiện loại phân tích này cho Squeak.
Frank Shearar

Điều này có lẽ sẽ phải được xây dựng trên một loại hệ thống suy luận kiểu nào đó, trên một ngôn ngữ không bao giờ được thiết kế cho kiểu suy luận.
Lie Ryan


2

Tự động xây dựng của Eclipse là tính năng tôi ngưỡng mộ nhất .... 7 năm trước. Bây giờ tôi chỉ coi nó là đương nhiên.


intellij chỉ nhận được điều này do v12. Khá nhiều thứ duy nhất nhật thực làm tốt hơn
NimChimpsky

2

Xcode 4 sửa các dấu chấm phẩy và lỗi chính tả và sử dụng các mũi tên để hiển thị cách xảy ra lỗi.

Ví dụ:

NSString *a = [[NSString alloc] init];
[a release];
int l = [a length];

Một mũi tên sẽ được rút ra [a release]để [a length]cho thấy lý do tại sao bạn không thể sử dụng [a length].


Hành vi này là xuống phân tích tĩnh clang. Bạn có thể chạy nó dưới dạng một lệnh riêng biệt và xem đầu ra trong trình duyệt. Không có mũi tên ưa thích mặc dù.
Sẽ

1

Mẫu mã và mở rộng, chẳng hạn như CodeRush của DevExpress. Trong C #, một DependencyPropertylà một nỗi đau lớn để tạo ra, kể từ cú pháp có thể lấy tiết, nhưng chỉ đơn giản là gõ "dp" sẽ trả về một cái gì đó giống như một đoạn mà bạn điền vào các loại, tên và giá trị mặc định, và tất cả những người khác đang thực hiện - bao gồm thêm bất kỳ câu lệnh "sử dụng" cần thiết nào và có thể là các tham chiếu dự án nếu bộ nhớ phục vụ.

Lợi ích là trong việc tạo các mẫu của riêng bạn, đối với mã bạn thường sử dụng lại hoặc viết lại, chẳng hạn như triển khai các INotifyPropertyChangedthuộc tính đơn giản, trong đó chỉ cần cung cấp cho mẫu và tên của thuộc tính (nếu một bộ mở rộng khác không xử lý nó) bạn muốn sử dụng và nó xử lý phần còn lại, bao gồm cả việc tạo biến sao lưu.


1

Pex thực hiện một số thế hệ thử nghiệm đơn vị tự động khá mát mẻ. Nó theo dõi mã của bạn, xác định các điểm nhánh, sử dụng một bộ giải có điều kiện để tạo các đầu vào đánh vào mọi nhánh có thể và sau đó cho phép bạn xuất kết quả dưới dạng các bài kiểm tra đơn vị lặp lại. Nó có thể làm nhục mã xử lý chuỗi phức tạp.


Đẹp! Mặc dù, tôi hy vọng nó sẽ được sử dụng nhiều hơn cho việc tạo dữ liệu thử nghiệm hơn là trường hợp thử nghiệm đầy đủ ! [Dữ liệu thử nghiệm + Đầu ra dự kiến ​​= Trường hợp thử nghiệm.] Nghĩa là, tự động tạo đầu ra dự kiến ​​có nghĩa là nó không thực sự kiểm tra những gì bạn nghĩ. Nó sẽ cần phải được xác nhận bởi một người biết thông số kỹ thuật.
Macneil

1

Trong Eclipse Tạo tự động SEtters và getters, tương tự tạo các phương thức trong lớp thực hiện từ một giao diện


1

Hỗ trợ của IntelliJ Idea về JPA

Đề cập đến bạn có một DatabaseEntity:

@Entity
public class Customer{
[...]
String lasName;
[...]

bây giờ bạn có một số câu hỏi JPA

Query q = "selecct s from Customer c where c.lasName=:lastName"

sau một thời gian bạn thấy, bạn đã mắc lỗi đánh máy trong Thực thể của mình và bạn quyết định cấu trúc lại tên laser thành LastName .

IDE đó cũng sẽ cấu trúc lại JPA-Query.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.