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?

serg
źródło
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.

Ryan Hayes
źródło
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

TheLQ
źródło
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

mpenrow
źródło
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.

bedwyr
źródło
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 = - {

MBonig
źródło
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.

Paul Nathan
źródło
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

Wieża
źródło
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.

Mark Canlas
źródło
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.

Frank Shearar
źródło
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ł.

Macneil
źródło
3

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

Mason Wheeler
źródło
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)
Aaron Digulla
źródło
„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.

AShelly
źródło
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

Jestem wielkim fanem możliwości kliknięcia alt-line w Vs2010 najlepszej rzeczy, jaką znalazłem na temat nowej wersji.

ponownie odtwarzać
źródło
2

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

nanda
źródło
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].

po prawej stronie
źródło
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.

Hugo
źródło
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.

nlawalker
źródło
Ł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

GoodSp33d
źródło
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.

Ckuetbach
źródło