Quali sono i trucchi più impressionanti che un IDE potrebbe realizzare con il codice? [chiuso]


18

Gli IDE moderni hanno molti trucchi nelle maniche per aiutare con la scrittura del codice, il refactoring, la ricerca. Tutti quelli sono molto utili, ma raramente nessuno di loro sembra una vera "magia" e mi fa pensare "Wow! Come è riuscito a capirlo?"

Riesci a nominare delle impressionanti funzioni di automazione del codice IDE (o altre) che ti hanno fatto impazzire la prima volta che le hai viste?


3
Bella domanda, mi piacerebbe vedere più risposte però ... Bounty!
Tamara Wijsman,

Non so se questa dovrebbe essere una risposta, ma perché non vedo alcuna menzione di IntelliJ IDEA ?
Marco C

5
I veri programmatori usano le farfalle.
destra

Impedimi di creare bug;)
Travis Christian,

questo non dovrebbe essere chiuso, è la domanda perfetta per qui, imho
NimChimpsky,

Risposte:


29

Debug all'indietro

Visual Studio 2010 (e ora 2012) mi consente di eseguire il debug all'indietro con IntelliTrace.

Non dovrò più rivivere il momento in cui ho colpito F10 una volta troppe volte e devo riavviare il debug.


2
Non l'ho ancora usato, ma voglio farlo.
AShelly,

Non l'ho nemmeno usato (uso RAD Studio per Delphi), ma sembra che un sogno divenuto realtà. (Ma questa è una risposta valida a questa domanda? È più una funzione di debug che una funzione di editor di codice. Beh, fa parte dell'IDE, quindi forse ...)
Andreas Rejbrand,

+1000: questo è così utile.
Callum Rogers,

Ha un comando COME FROM? :)
Joonas Pulakka,

2
il problema è che puoi farlo solo con i linguaggi MS (gestiti) e non con C ++, ad esempio
Apri la strada il

16

Completamento del codice

Quando tutto ciò che hai visto è un editor di testo, questo è impressionante


3
In realtà non è poi così impressionante, puoi farlo semplicemente analizzando un file TAGS.
alternativa il

2
Quello che mi piace è hippie-espandere ... è profondamente più utile per me che il completamento del codice.
Paul Nathan,

2
@mathepic Ed esattamente quante persone sanno farlo?
TheLQ

2
È impressionante se hai programmato fin dai tempi del mainframe.
AShelly,

4
Ragazzi, se non trovate questa risposta accattivante, votate invece per un'altra risposta, anziché dissentire nei commenti. È una domanda soggettiva, quindi è probabile che lo siano anche le risposte fornite.
JBR Wilkinson,

16

La capacità di ReSharper di indovinare ciò che voglio una variabile chiamata continua a stupirmi. Ecco un esempio molto semplice ma hai avuto l'idea.

testo alternativo


1
Puoi per favore forse dare alcuni esempi per coloro che non l'hanno mai visto in azione (io)
serg

9
Se il tuo editor di testo può sostituirti con la scrittura di codice, ho delle brutte notizie ...
P Shved

3
foreach(var matche in regex.Matches(str)). Imposta anche matchecome objectpiuttosto che come Matchnon molto utile.
Callum Rogers,

1
@Callum: vero, ma è solo perché MatchCollectionè una raccolta non tipizzata. Per le raccolte appropriate, varfunziona alla grande. (Comunque non mi piace comunque)
Configuratore

1
questa è una funzione anche in eclissi.
NimChimpsky,

12

Sono stato molto colpito dagli strumenti di refactoring di Eclipse quando li ho incontrati per la prima volta. La capacità di estrarre metodi (che, quando stai imparando un design migliore è un evento comune) da una grande porzione di codice e avere tutto gestito per me è stata piuttosto interessante.


12

Bolle di codice. http://www.andrewbragdon.com/codebubbles_site.asp

Adoro Visual Studio ed Eclipse per gli strumenti che mi offrono per modificare il codice, ma Code Bubbles mi entusiasma davvero per essere in grado di navigare e visualizzare il mio codice. Peccato che non sia pubblicamente disponibile = - {


2
Wow. Quel video ... sto sbavando. Posso avere questo per C ++, per favore?
sbi,

Non posso dire altro che wow.
Icode4food,

1
+1 Sebbene non mi piaccia l'attuale interfaccia grafica, il concetto in sé è piuttosto sorprendente ...
Tamara Wijsman,

funziona davvero? piccole caselle con parte del codice. Per usarlo è necessario un monitor che abbia le dimensioni di un muro.
IAdapter,

Spero che questo non venga mai implementato in Emacs. Al mio mignolo sinistro non piacerà.
destra

7

L'ambiente di programmazione più impressionante di cui abbia mai sentito parlare è il sistema operativo Genera.

È possibile fare clic su qualsiasi widget nel sistema a finestre e ottenere una lettura completa del codice sorgente e della documentazione dell'articolo. Essendo un linguaggio di programmazione dinamico (Lisp), è possibile modificare al volo la fonte del widget.

Si dice ancora che ZMACS dal mondo Lisp Machine sia un editor migliore di Emacs, che è un ambiente editor senza pari.


Il mio primo lavoro di informatica dopo l'università stava lavorando con una workstation simbolica (usando generi), credimi, c'è una ragione per cui non ha funzionato!
Finlandia

3
Oh, elaborati!
Segna C

sì, mi piacerebbe sapere perché anche Genera non ha preso
piede

@FinnNk: forse potresti elaborarlo?
Paul Nathan,

6

Mostrare visivamente la struttura del programma (programmi / funzioni / routine / ...)

testo alternativo


Quale editore è quello?
Paul Nathan,


Sfortuna ... (Hai ricevuto la posta proprio nel momento in cui hai preso lo screenshot.) Ma questa non è una funzionalità molto avanzata. Certo, è probabilmente molto utile, ma non molto "impressionante" (per niente).
Andreas Rejbrand,

@Andreas Rejbrand - Scusa Andreas, ma quale posta? Quale screenshot? Temo di non capire di cosa stai parlando.
Rook,

@Rook: sta parlando dell'immagine nella tua risposta e della piccola scatola blu in basso a destra che sembra essere una notifica e-mail da Outlook. . .
Tim Goodman,

4

La capacità di ReSharper di refactoring. In piena divulgazione, potrei essere dietro la curva qui poiché penso che Java con Eclipse abbia questo tipo di funzionalità da qualche tempo, ma non lavoro regolarmente con Java.

Il delta di funzionalità che ReSharper aggiunge a Visual Studio è così eccezionale, incredibile. So di sembrare una pubblicità, ma non credo che potrei mai tornare a utilizzare un'installazione di Visual Studio di serie senza ReSharper in cima.

Più in generale, una comprensione semantica del codice batterebbe i pantaloni da un semplice vecchio editor di testo ogni giorno. Questo porta a cose come "trova gli usi della variabile" o "funzione in linea" o "opportunità di usare un modello idiomatico", ecc.


Mi è stato detto una volta al lavoro, "Gli amici non permettono agli amici di programmare senza ReSharper".
Frank Shearar,

4

Debugger di Smalltalk:

  • Accesso completo all'intero stack di chiamate (Qual è stata questa variabile di istanza di quei mittenti dell'oggetto 3 nello stack?)
  • Modifica il codice testato nel debugger, riavvia e prosegui l'esecuzione del programma come se nulla fosse.

È perfettamente normale in Smalltalk trascorrere la maggior parte del tempo a scrivere codice all'interno del debugger.

(Ricordo di essere stato spazzato via eseguendo un metodo, vedendo qualcosa di sbagliato, cambiandolo ed eseguendo di nuovo il metodo senza riavviare l'applicazione nel corso della giornata con Visual Age per Java ... perché VA4J è stato scritto in Visual Age per Smalltalk.)

Ricerca metodi di Smalltalk

Method Finder ti consente di chiedere "quale messaggio posso inviare per accettare questi parametri e ottenere questo risultato?" Chiedi 'abc'. 'def'. 'abcdeb'.e ti dice 'abc' , 'def' --> 'abcdef'. Chiedilo #(0 1 2 3)e dice #(0 1 2 3) sum --> 6. * Mittenti, implementatori di tutto te per trovare tutti (*) i mittenti di un messaggio o tutti gli oggetti che implementano quel messaggio.

(*) Tranne quando fai cose come creare nomi di messaggi in fase di esecuzione: self perform: (#foo, #bar)per inviarti il ​​messaggio #foobar- nel qual caso sai cosa stai facendo e non ti dispiace il potenziale di sollevarti sul tuo petardo.


4

Whyline

Whyline per Java mi ha davvero colpito quando l'ho visto. È uno strumento di analisi dinamica che ti consente di porre domande sull'output del programma e non solo sul testo, ma anche sulla grafica. Ad esempio, puoi chiedere "perché quella linea era rossa?" o "perché non è stato chiamato il metodo di pittura?"

Funziona strumentando il tuo programma e registrando una corsa. Ad esempio, supponiamo che ci sia un bug che puoi riprodurre. Strumenti il ​​tuo programma con Whyline, esegui il tuo programma in Whyline per riprodurre il bug e quindi quando esci dal programma, puoi usare Whyline per ispezionare la cronologia delle esecuzioni.

Questa registrazione e riproduzione non sono nuove, ma il modo in cui Whyline implementa è piuttosto fluido. È possibile visualizzare la cronologia in base a eventi specifici (ad es. Concentrandosi solo sugli eventi di trascinamento del mouse o solo sugli eventi di keydown). Associa anche l'output a quale parte del programma lo ha stampato, in modo da poter navigare dall'output al codice.

Per funzionare, utilizza lo slicing del programma, in modo che tu possa concentrarti sulle parti del codice che sono effettivamente rilevanti. La CMU ora ha un brevetto e non so quali siano i loro piani, ma spero di poterne vedere di più nella produzione. È un porco di memoria, ma è probabile perché è un prototipo e può migliorare.

Dovresti vedere la demo online, ma dovresti anche provarla per ottenere l'esperienza completa. Semmai, le demo online sottolineano l'idea.


3

Penso che la funzione IDE più impressionante che abbia mai visto sia SyncEdit , che AFAIK è disponibile solo in Delphi.


Non è solo rinominare i membri? Eclipse fa questo sul posto. Modifica: Oh vedo, puoi farlo all'interno di una selezione.
Matt Olenik,

1
Anche Eclipse ce l'ha (usalo sempre). Utile - molto. Magico - non così sicuro.
serg

@Serg: Oh, ce l'ha anche Eclipse? Non lo saprei; Non uso Java. So che VS non ce l'ha ...
Mason Wheeler,

@Matt: puoi farlo all'interno di una selezione e poiché puoi farlo all'interno di una selezione, puoi farlo attraverso tutto il file che desideri. Non è limitato dall'ambito o da altri vincoli che un parser di refactoring porrà sulla ridenominazione dei membri.
Mason Wheeler,

Anche Netbeans ha questo. Di solito ctrl-r.
Alan Pearce,

2

Quello che mi piacerebbe vedere in un IDE sono queste caratteristiche:

  • Visualizza il codice nel modo in cui sono abituato (indipendentemente da come è effettivamente formattato)
  • Consentire di incorporare tabelle (ad esempio un foglio di calcolo Excel in cui posso leggere i valori della cella con sheet[A3]) e disegni nel codice e accedervi come qualsiasi variabile.
  • Consenti di omettere parentesi graffe e altri codici non necessari che sono lì solo per rendere felice l'analisi.
  • Ricerca nel codice con un motore simile a Google (in particolare ottenere risultati di ricerca entro 35 ms)
  • Visualizzazione di ifcondizioni complesse in modo tabellare (ancora alla ricerca del collegamento).
  • Strumenti di refactoring che possono trovare codice simile, estrarre le differenze e ridurle al massimo.
  • Supporto per la generazione di codice obbedendo alle regole del linguaggio (pensa: crea tutti i getter e setter per le classi Java a meno che non esista già un metodo con lo stesso nome o che dipenda dalle annotazioni)

"Crea tutti i getter e setter per le classi Java a meno che non esista già un metodo con lo stesso nome" Penso che l'eclissi lo faccia ...
Hila,

Gli obiettivi "Visualizza il codice come sono abituato" e "Consenti di omettere le parentesi graffe" sono compatibili?
TRiG

@Hila: Sì, ma il codice è visibile . Quello che mi piacerebbe è che il compilatore li genera solo quando compila il sorgente Java; Non voglio che ingombrino la fonte.
Aaron Digulla,

@TRiG: IMHO, c'è una grande sovrapposizione tra i due. Indento tutto il mio codice; le parentesi graffe sono completamente inutili.
Aaron Digulla,

Se, forse, l'IDE salva parentesi graffe ma non le visualizza, ciò potrebbe funzionare.
TRiG

2

Tipo di controllo per le lingue dinamiche

Finché il codice non ottiene troppo "meta", un IDE per Ruby o Python dovrebbe essere in grado di eseguire un'attività in background che:

  • per una determinata funzione, determina tutte le classi possibili che verranno passate come argomenti
  • per quelle classi, assicura che rispondano a tutti i metodi invocati da quella funzione
  • presenta un elenco delle classi incompatibili con i metodi mancanti che è necessario implementare

Non ho ancora visto un IDE che fa questo.


Vuoi dire che non hai visto un ID R / P che fa questo o qualsiasi IDE in generale?
Segna C

Non l'ho mai visto da nessuna parte, ma non ho nemmeno guardato molto duramente.
AShelly,

RoelTyper di Roel Wuyts e Chuck di Lex Spoon hanno fatto / fatto questo tipo di analisi per Squeak.
Frank Shearar,

Questo dovrebbe probabilmente essere costruito su una sorta di sistema di inferenza del tipo, su un linguaggio che non è mai stato progettato per l'inferenza del tipo.
Lie Ryan,


2

Auto Build di Eclipse è la caratteristica che ammiro di più .... 7 anni fa. Ora lo dò per scontato.


intellij lo sta solo ottenendo in v12. Praticamente l'unica cosa che eclissi fa meglio
NimChimpsky,

2

Xcode 4 corregge punti e virgola e errori di battitura e utilizza le frecce per mostrare come si è verificato un errore.

Per esempio:

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

Una freccia verrà disegnata da [a release]a [a length]per mostrare perché non è possibile utilizzare [a length].


Questo comportamento dipende dall'analizzatore statico clang. È possibile eseguirlo come comando separato e visualizzare l'output in un browser. Nessuna freccia di fantasia però.
Sarà il

1

Modelli di codice ed espansione, come CodeRush di DevExpress. In C #, a DependencyPropertyè un grande dolore da creare, poiché la sintassi può diventare verbosa, ma semplicemente digitando "dp" si avvicina qualcosa di simile a uno snippet in cui si inseriscono il tipo, il nome e il valore predefinito, e tutto il resto è fatto - tra cui aggiungendo tutte le necessarie istruzioni "using" e possibilmente i riferimenti di progetto se la memoria serve.

Il vantaggio è nella creazione di modelli personalizzati, per il codice che riutilizzi o riscrivi spesso, come semplici implementazioni di INotifyPropertyChangedproprietà, in cui è sufficiente assegnare al modello il nome e il tipo della proprietà (se un altro espansore non lo ha gestito) che desideri utilizzare e gestisce il resto, inclusa la creazione della variabile di supporto.


1

Pex esegue una generazione piuttosto interessante di test di unità automatizzati. Tiene traccia del codice, determina i punti di diramazione, utilizza un risolutore condizionale per generare input che colpiscono ogni possibile ramo e quindi ti consente di esportare i risultati come test unitari ripetibili. Può umiliare un codice complesso di gestione delle stringhe.


Bello! Tuttavia, spero che venga utilizzato di più per la generazione dei dati di test piuttosto che per l'intero test case ! [Dati test + Output previsto = Caso di test.] Cioè, generare automaticamente l'output previsto significa che non sta effettivamente testando quello che pensi che sia. Dovrebbe essere verificato da qualcuno che conosce le specifiche.
Macneil,

1

In Eclipse Genera automaticamente setter e getter, allo stesso modo crea metodi in implementa la classe da un'interfaccia


1

Supporto di IntelliJ Idea all'APP

Indica che hai un DatabaseEntity:

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

ora hai alcune query JPA

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

dopo un po 'di tempo vedi che hai fatto un refuso all'interno della tua Entità e decidi di refactificare lasname in lastName .

Tale IDE rifatterà anche la query JPA.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.