Jakie są najbardziej imponujące sztuczki, które IDE może wykonać za pomocą kodu? [Zamknięte]


18

Nowoczesne IDE mają wiele sztuczek, które pomagają w pisaniu kodu, refaktoryzacji, wyszukiwaniu. Wszystko to jest bardzo pomocne, ale rzadko któryś z nich wygląda jak prawdziwa „magia” i sprawia, że ​​myślę „Wow! Jak to wymyśliłeś?”

Czy potrafisz wymienić imponujące funkcje automatyzacji kodu IDE (lub inne), które zaskoczyły Cię po raz pierwszy?


3
Dobre pytanie, chciałbym zobaczyć więcej odpowiedzi ... Bounty!
Tamara Wijsman

Nie wiem, czy to powinna być odpowiedź, ale dlaczego nie widzę wzmianek o IntelliJ IDEA ?
Mark C

5
Prawdziwi programiści używają motyli.
prawej

Nie pozwól mi tworzyć błędów;)
Travis Christian,

to nie powinno być zamknięte, to idealne pytanie tutaj,
imho

Odpowiedzi:


29

Debugowanie wstecz

Visual Studio 2010 (a teraz 2012) pozwala mi debugować wstecz za pomocą IntelliTrace.

Nigdy więcej nie będę musiał ponownie przeżywać momentu, w którym uderzyłem F10 jeden raz zbyt wiele i musiałbym ponownie uruchomić debugowanie.


2
Jeszcze tego nie użyłem, ale chcę.
AShelly

Ja też tego nie używałem (używam RAD Studio dla Delphi), ale brzmi to jak spełnienie marzeń. (Ale to jest ważna odpowiedź na to pytanie jest bardziej cechą debugger niż funkcji edytora kodu dobrze, to jest częścią IDE, więc może ...?).
Andreas Rejbrand

+1000: Jest to bardzo przydatne.
Callum Rogers

Czy ma komendę COME FROM? :)
Joonas Pulakka

2
problem polega na tym, że możesz to zrobić tylko z językami MS (zarządzanymi), a nie z C ++, na przykład
Otwórz sposób

16

Uzupełnianie kodu

Gdy wszystko, co widziałeś, to edytor tekstów, robi to wrażenie


3
Nie tak imponujące, możesz to zrobić po prostu analizując plik TAGS.
alternatywny

2
To, co lubię, to rozwijanie hipisów ... jest to dla mnie znacznie bardziej przydatne niż uzupełnianie kodu.
Paul Nathan

2
@mathepic A ile dokładnie osób wie, że to robi?
TheLQ

2
To imponujące, jeśli programujesz od czasów komputerów mainframe.
AShelly

4
Chłopaki, jeśli ta odpowiedź nie jest dla was atrakcyjna, zamiast tego nie głosujcie w komentarzach, głosujcie na inną odpowiedź. To subiektywne pytanie, więc prawdopodobnie udzielone odpowiedzi również będą.
JBRWilkinson

16

Zdolność ReSharpera do odgadnięcia, co chcę o nazwie zmiennej, nadal mnie zadziwia. Oto bardzo prosty przykład, ale masz pomysł.

alternatywny tekst


1
Czy mógłbyś podać jakieś przykłady dla tych, którzy nigdy nie widzieli go w akcji (ja)
serg

9
Jeśli twój edytor tekstu może zastąpić cię pisaniem kodu, mam złe wieści ...
P Shved

3
foreach(var matche in regex.Matches(str)). Ustawia również matchejako objectraczej niż Matchmało przydatny.
Callum Rogers,

1
@Callum: To prawda, ale to tylko dlatego, że MatchCollectionjest to kolekcja bez typów. Dla prawidłowych kolekcji vardziała świetnie. (Nadal mi się to nie podoba)
konfigurator

1
jest to również cecha zaćmienia.
NimChimpsky

12

Byłem pod dużym wrażeniem narzędzi refaktoryzacyjnych Eclipse, kiedy je pierwszy raz spotkałem. Zdolność do wyodrębnienia metod (które, kiedy uczysz się lepszego projektowania, jest częstym zjawiskiem) z dużej części kodu i obsługiwać wszystko dla mnie było całkiem fajne.


12

Code Bubbles. http://www.andrewbragdon.com/codebubbles_site.asp

Uwielbiam Visual Studio i Eclipse za narzędzia, które dają mi do zmiany kodu, ale Code Bubbles naprawdę mnie podnieca, że ​​mogę nawigować i przeglądać mój kod. Szkoda, że ​​nie jest publicznie dostępny = - {


2
Łał. Ten film ... ślinię się. Czy mogę to mieć dla C ++?
sbi

Nie mogę nic powiedzieć, tylko wow.
Icode4food,

1
+1 Chociaż nie podoba mi się obecny GUI, sama koncepcja jest niesamowita ...
Tamara Wijsman

czy to naprawdę działa? małe pudełka z częścią kodu. Aby go użyć, potrzebujesz monitora o rozmiarze ściany.
IAdapter

Mam nadzieję, że nigdy nie zostanie to zaimplementowane w Emacsie. Moja lewa pinky tego nie polubi.
prawej

7

Najbardziej imponującym środowiskiem programistycznym, o jakim kiedykolwiek słyszałem, jest system operacyjny Genera.

Możesz kliknąć dowolny widżet w systemie okienkowym i uzyskać pełny odczyt kodu źródłowego i dokumentacji produktu. Będąc dynamicznym językiem programowania (Lisp), możesz edytować źródło widgetu w locie.

ZMACS ze świata Lisp Machine wciąż jest uważany za lepszego edytora niż Emacs, który jest środowiskiem edytorskim bez rówieśników.


Moja pierwsza praca z komputerem po studiach polegała na pracy ze stacją roboczą z symboliką (za pomocą rodzajów), wierz mi, że istnieje powód, dla którego się nie przyłapała!
FinnNk

3
Och, opracowujcie!
Mark C

tak, chciałbym wiedzieć, dlaczego Genera też się nie
przyjęła

@FinnNk: Być może mógłbyś opracować?
Paul Nathan

6

Wizualne przedstawienie struktury programu (programy / funkcje / procedury / ...)

alternatywny tekst


Który to edytor?
Paul Nathan


Pech ... (Dostałeś pocztę w momencie zrobienia zrzutu ekranu.) Ale to nie jest bardzo zaawansowana funkcja. Pewnie, jest to prawdopodobnie bardzo przydatne, ale niezbyt „imponujące” (wcale).
Andreas Rejbrand,

@Andreas Rejbrand - Przepraszam Andreas, ale jaka poczta? Jaki zrzut ekranu? Obawiam się, że nie rozumiem o czym mówisz.
Rook

@Rook: Mówi o obrazie w twojej odpowiedzi i małym niebieskim polu w prawym dolnym rogu, które wydaje się być powiadomieniem e-mail z programu Outlook. . .
Tim Goodman,

4

Zdolność ReSharpera do refaktoryzacji.W pełnym ujawnieniu, mogę być za zakrętem, ponieważ uważam, że Java z Eclipse ma ten rodzaj funkcjonalności od pewnego czasu, ale nie pracuję regularnie z Javą.

Delta możliwości, którą ReSharper dodaje do Visual Studio, jest tak wielka, że ​​niewiarygodna. Wiem, że brzmię jak reklama, ale nie sądzę, żebym kiedykolwiek mógł wrócić do zwykłej instalacji programu Visual Studio bez ReSharpera na wierzchu.

Mówiąc bardziej ogólnie, semantyczne zrozumienie kodu oderwałoby się od zwykłego, starego edytora tekstu każdego dnia. Prowadzi to do takich rzeczy jak „znajdź użycie zmiennej” lub „funkcja wbudowana” lub „możliwość użycia wzorca idiomatycznego” itp.


Raz w pracy powiedziano mi: „Przyjaciele nie pozwalają znajomym programować bez ReSharpera”.
Frank Shearar,

4

Debuger Smalltalk:

  • Pełny dostęp do całego stosu wywołań (co to była zmienna instancji tego obiektu 3 nadawców w dół stosu?)
  • Edytuj testowany kod w debuggerze, uruchom ponownie i kontynuuj wykonywanie programu, jakby nic się nie wydarzyło.

W Smalltalk normalne jest spędzanie większości czasu na pisaniu kodu z poziomu debuggera.

(Pamiętam, że zostałem oszołomiony przez uruchomienie metody, zobaczenie czegoś złego, zmianę tego i ponowne uruchomienie metody bez ponownego uruchamiania aplikacji z powrotem za pomocą Visual Age for Java ... ponieważ VA4J został napisany w Visual Age dla Smalltalk.)

Wyszukiwarka metod Smalltalk

Wyszukiwarka metod pozwala zapytać „jaką wiadomość mogę wysłać, aby wziąć te parametry i uzyskać ten wynik?” Zapytaj, 'abc'. 'def'. 'abcdeb'.a powie ci 'abc' , 'def' --> 'abcdef'. Zapytaj #(0 1 2 3)i powie #(0 1 2 3) sum --> 6. * Nadawcy, realizatorzy wszystkiego, aby znaleźć wszystkich (*) nadawców wiadomości lub wszystkie obiekty, które implementują tę wiadomość.

(*) Z wyjątkiem sytuacji, w których robisz takie rzeczy, jak tworzenie nazw wiadomości w czasie wykonywania: self perform: (#foo, #bar)aby wysłać sobie wiadomość #foobar- w takim przypadku wiesz, co robisz, i nie masz nic przeciwko potencjalnej możliwości zdobycia własnej petardy.


4

Whyline

Whyline for Java naprawdę zrobiło na mnie wrażenie, kiedy go zobaczyłem. Jest to narzędzie do dynamicznej analizy, które pozwala zadawać pytania dotyczące wyników programu, a nie tylko tekstu, ale także grafiki. Na przykład możesz zapytać „dlaczego ta linia była czerwona?” lub „dlaczego nie wywołano metody malowania?”

Działa poprzez instrumentowanie programu i rejestrowanie przebiegu. Załóżmy na przykład, że istnieje błąd, który można odtworzyć. Instrumentujesz swój program za pomocą Whyline, uruchamiasz swój program w Whyline, aby odtworzyć błąd, a następnie po wyjściu z programu możesz użyć Whyline do sprawdzenia historii wykonania.

To nagrywanie i odtwarzanie nie jest niczym nowym, ale sposób, w jaki implementuje go Whyline, jest całkiem sprytny. Możesz przeglądać historię według określonych zdarzeń (np. Skupiając się tylko na zdarzeniach przeciągania myszą lub tylko na zdarzeniach klawiszowych). Kojarzy także dane wyjściowe z tym, która część programu je wydrukowała, dzięki czemu można przechodzić od danych wyjściowych do kodu.

Do pracy wykorzystuje krojenie programu, dzięki czemu można skupić się na tych częściach kodu, które są rzeczywiście odpowiednie. CMU ma teraz na to patent i nie wiem, jakie są ich plany, ale mam nadzieję, że zobaczymy więcej tego w produkcji. To świnia pamięci, ale prawdopodobnie jest to prototyp i można go ulepszyć.

Powinieneś zobaczyć wersję demonstracyjną online, ale powinieneś również wypróbować ją sam, aby uzyskać pełne wrażenia. Jeśli już, dema online podważają ten pomysł.


3

Myślę, że najbardziej imponującą funkcją IDE, jaką widziałem, jest SyncEdit , który AFAIK jest dostępny tylko w Delphi.


Czy to nie tylko zmiana nazwy członków? Eclipse robi to w miejscu. Edycja: Och, rozumiem, możesz to zrobić w ramach zaznaczenia.
Matt Olenik,

1
Eclipse też to ma (używaj go cały czas). Przydatne - bardzo. Magiczne - nie tak pewne.
serg

@Serg: Och, Eclipse też to ma? Nie wiedziałbym; Nie używam Java. Wiem, że VS go nie ma ...
Mason Wheeler,

@Matt: Możesz to zrobić w obrębie zaznaczenia, a ponieważ możesz to zrobić w zaznaczeniu, możesz to zrobić w dowolnej części pliku. Nie jest to ograniczone zakresem ani innymi ograniczeniami, które parser refaktoryzujący nałożyłby na zmianę nazwy członka.
Mason Wheeler,

Netbeans też to ma. Zwykle ctrl-r.
Alan Pearce,

2

W IDE chciałbym zobaczyć następujące funkcje:

  • Wyświetlaj kod w sposób, w jaki jestem przyzwyczajony (niezależnie od tego, jak jest faktycznie sformatowany)
  • Pozwól osadzać tabele (powiedz arkusz kalkulacyjny Excel, w którym mogę odczytać wartości komórek sheet[A3]) i rysunki w kodzie i uzyskać do nich dostęp jak każdą zmienną.
  • Pozwól pominąć nawiasy klamrowe i inny niepotrzebny kod, który jest tylko po to, aby uszczęśliwić parsowanie.
  • Wyszukiwanie kodu za pomocą silnika podobnego do Google (zwłaszcza uzyskiwanie wyników wyszukiwania w ciągu 35 ms)
  • Wyświetlanie złożonych ifwarunków w sposób tabelaryczny (wciąż szukanie linku).
  • Narzędzia do refaktoryzacji, które mogą znaleźć podobny kod, wyodrębnić różnice i zredukować je do maksimum.
  • Obsługa generowania kodu przy jednoczesnym przestrzeganiu reguł językowych (pomyśl: Utwórz wszystkie moduły pobierające i ustawiające dla klas Java, chyba że istnieje już metoda o tej samej nazwie lub zależna od adnotacji)

„Utwórz wszystkie moduły pobierające i ustawiające dla klas Java, chyba że istnieje już metoda o tej samej nazwie”. Myślę, że eclipse to robi…
Hila

Czy cele „Wyświetlaj kod w sposób, w jaki jestem przyzwyczajony” i „Pozwól mi pomijać nawiasy klamrowe” są zgodne?
TRiG

@Hila: Tak, ale kod jest widoczny . Chciałbym, aby kompilator po prostu generował je podczas kompilacji źródła Java; Nie chcę, żeby zaśmiecali źródło.
Aaron Digulla

@TRiG: IMHO, oba te elementy w dużym stopniu się pokrywają. Wcinam cały mój kod; szelki są całkowicie bezużyteczne.
Aaron Digulla

Jeśli IDE może zapisywać nawiasy klamrowe, ale ich nie wyświetla, może to działać.
TRiG,

2

Sprawdzanie typu dla języków dynamicznych

Dopóki twój kod nie otrzyma zbyt „meta”, IDE dla Ruby lub Python powinno być w stanie uruchomić zadanie w tle, które:

  • dla danej funkcji określa wszystkie możliwe klasy, które zostaną przekazane jako argumenty
  • dla tych klas zapewnia, że ​​odpowiadają one wszystkim metodom wywoływanym przez tę funkcję
  • przedstawia listę niekompatybilnych klas z brakującymi metodami, które należy zaimplementować

Nie widziałem jeszcze IDE, które to robi.


Czy masz na myśli, że nie widziałeś IDE R / P, które robi to lub jakiekolwiek IDE ogólnie?
Mark C

Nigdzie tego nie widziałem, ale też nie wyglądałem naprawdę ciężko.
AShelly

RoelTyper i Chuck Lexa Spoon'a Roela Wuytsa zrobili / zrobili tego rodzaju analizę dla Squeaka.
Frank Shearar,

Prawdopodobnie musiałby to być zbudowany na jakimś systemie wnioskowania typu, na języku, który nigdy nie został zaprojektowany do wnioskowania typu.
Lie Ryan


2

Auto Build Eclipse to funkcja, którą najbardziej podziwiam .... 7 lat temu. Teraz po prostu biorę to za pewnik.


Intellij dopiero otrzymuje to w wersji 12. Prawie jedyne, co zaćmienie robi lepiej
NimChimpsky

2

Xcode 4 naprawia średniki i literówki oraz używa strzałek, aby pokazać, jak wystąpił błąd.

Na przykład:

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

Strzałka będą pochodziły [a release]aby [a length]pokazać, dlaczego nie można używać [a length].


To zachowanie jest zależne od analizatora statycznego clang. Możesz uruchomić go jako osobne polecenie i wyświetlić dane wyjściowe w przeglądarce. Żadnych wymyślnych strzał.
Will

1

Szablony i rozszerzenia kodu, takie jak CodeRush DevExpress. W C # a DependencyPropertyjest poważnym problemem do stworzenia, ponieważ składnia może być pełna, ale po prostu wpisanie „dp” wywołuje coś podobnego do fragmentu kodu, w którym wpisujesz typ, nazwę i wartość domyślną, a wszystko inne jest zrobione - w tym dodawanie wszelkich niezbędnych instrukcji „using” i ewentualnie referencje projektu, jeśli pamięć służy.

Korzyścią jest tworzenie własnych szablonów, dla kodu często ponownie używanego lub przepisywanego, na przykład prostych implementacji INotifyPropertyChanged właściwości, w których wystarczy podać szablonowi nazwę i typ właściwości (jeśli inny ekspander nie obsługiwał go), którego chcesz użyć , i obsługuje resztę, w tym tworzenie zmiennej bazowej.


1

Pex wykonuje całkiem niezłe generowanie automatycznych testów jednostkowych. Śledzi kod, określa punkty rozgałęzienia, używa solwera warunkowego do generowania danych wejściowych, które trafiają do każdej możliwej gałęzi, a następnie pozwala eksportować wyniki jako powtarzalne testy jednostkowe. Może upokorzyć złożony kod obsługi ciągów.


Ładny! Chociaż mam nadzieję, że przydadzą się bardziej do generowania danych testowych niż do pełnego przypadku testowego ! [Dane testowe + oczekiwany wynik = przypadek testowy.] Oznacza to, że automatyczne wygenerowanie oczekiwanego wyniku oznacza, że ​​tak naprawdę nie testuje tego, co myślisz. Musi to zostać zweryfikowane przez kogoś, kto zna specyfikację.
Macneil

1

W Eclipse Generuj SEttery i pobieraj automatycznie, podobnie twórz metody w implementacji klasy z interfejsu


1

Wsparcie JPA przez IntelliJ Idea

Wspomnij, że masz DatabaseEntity:

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

teraz masz kilka zapytań JPA

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

Po pewnym czasie widać, że zrobiłeś literówkę w swoim Jednostki i zdecydować byłaby lasname do lastName .

To IDE refaktoryzuje również zapytanie JPA.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.