Які найбільш вражаючі хитрощі IDE можуть виконувати разом із кодом? [зачинено]


18

Сучасні ІДЕ мають безліч хитрощів, щоб допомогти в написанні коду, рефакторингу, пошуку. Все це дуже корисно, але рідко хтось із них виглядає як справжня "магія" і змушує задуматися "Вау! Як це зрозуміло?"

Чи можете ви назвати будь-які вражаючі функції автоматизованого коду IDE (або інші), які підірвали ваш розум у перший раз, коли ви їх побачили?


3
Хороше запитання, хотіли б побачити більше відповідей, хоча ... Баунті!
Тамара Війсман

Я не знаю, чи має це відповісти, але чому я не бачу жодних згадок про IntelliJ IDEA ?
Марк C

5
Справжні програмісти використовують метеликів.
праворуч

Не дайте мені створювати помилки;)
Travis Christian

це не повинно бути закритим, його ідеальне питання тут, imho
NimChimpsky

Відповіді:


29

Налагодження налагодження

Visual Studio 2010 (і зараз 2012) дозволяє мені налагоджувати назад за допомогою IntelliTrace.

Ніколи більше мені не доведеться переживати момент, коли я занадто багато разів натискаю F10 і мені доведеться перезавантажувати налагодження.


2
Я цього ще не використовував, але хочу.
AShelly

Я також не користувався цим (я використовую RAD Studio для Delphi), але це звучить як реалізація мрії. (Але це правдива відповідь на це питання? Це скоріше функція налагодження, ніж функція редактора коду. Ну, це частина IDE, тож, можливо, ...)
Андреас Рейбранд

+1000: Це так корисно.
Callum Rogers

У нього є команда COME FROM? :)
Joonas Pulakka

2
проблема полягає в тому, що ви можете це робити лише на мовах MS (керовано), а не на C ++, наприклад
Відкрийте шлях

16

Заповнення коду

Коли все, що ви бачили, це текстовий редактор, це вражає


3
Насправді це не все вражає, ви можете це зробити, просто проаналізувавши файл TAGS.
альтернатива

2
Те , що я , як це хіпі розширення ... це глибоко кориснішим для мене , ніж завершення коду.
Пол Натан

2
@mathepic А скільки саме людей знає для цього?
TheLQ

2
Вражає, якщо ви програмували з основних днів.
AShelly

4
Хлопці, якщо ця відповідь не вважається привабливою, будь ласка, проголосуйте замість неї за іншу відповідь, а не погоджуючись у коментарях. Це суб'єктивне запитання, тому відповіді, що надаються, ймовірно, будуть занадто.
JBRWilkinson

16

Здатність ReSharper вгадувати, чого я хочу, щоб названа змінна продовжувала мене дивувати. Ось дуже простий приклад, але ви розумієте.

alt текст


1
Чи можете ви, будь ласка, наведіть кілька прикладів для тих, хто ніколи не бачив цього в дії (я)
серг

9
Якщо ваш текстовий редактор може замінити вас у написанні коду, у мене є погані новини ...
П Швед

3
foreach(var matche in regex.Matches(str)). Також задається matcheяк objectне Match, не дуже корисний.
Callum Rogers

1
@Callum: Це правда, але це лише тому MatchCollection, що це нетипізована колекція. Для правильних колекцій varчудово працює. (Мені все ще не подобається)
конфігуратор

1
це і особливість у затемненні.
NimChimpsky

12

Я був дуже вражений інструментами рефакторингу Eclipse, коли я вперше зіткнувся з ними. Можливість витягувати методи (які, коли ви навчаєтесь кращому дизайну - це звичайне явище) з великого куска коду та все, що для мене справляється, була досить прикольною.


12

Код бульбашки. http://www.andrewbragdon.com/codebubbles_site.asp

Я люблю Visual Studio і Eclipse за ті інструменти, які вони мені дають змінити код, але Code Bubbles дійсно хвилює мене за те, що я можу орієнтуватися та переглядати свій код. Шкода, що він не є загальнодоступним = - {


2
Ого. Це відео ... Я слию. Чи можу я отримати це для C ++, будь ласка?
sbi

Я нічого не можу сказати, окрім уау.
Icode4food

1
+1 Хоча нинішній графічний інтерфейс мені не подобається, сама концепція є надзвичайно дивовижною ...
Tamara Wijsman

це справді працює? невеликі скриньки з частиною коду. Для його використання вам знадобиться монітор, який має розмір стіни.
IAdapter

Я сподіваюся, що це ніколи не буде реалізовано в Emacs. Мій лівий рожевий не сподобається.
праворуч

7

Найбільш вражаюче середовище програмування, про яке я коли-небудь чув, - це операційна система Genera.

Ви можете натиснути будь-який віджет у системі вікон та отримати повне зчитування вихідного коду та документації елемента. Будучи динамічною мовою програмування (Lisp), ви можете відредагувати джерело віджета на льоту.

ZMACS зі світу машини Lisp все ще вважається кращим редактором, ніж Emacs, що є середовищем редактора без однолітків.


Моя перша обчислювальна робота після університету працювала на робочій станції з символікою (використовуючи роди), повірте, є причина, яку вона не прижилася!
FinnNk

3
О, робіть докладно!
Марк C

так, мені хотілося б дізнатися, чому Genera також не піймав
Yazz.com

@FinnNk: Можливо, ви могли б детальніше?
Пол Натан

6

Візуально показана структура програми (програми / функції / підпрограми / ...)

alt текст


Який це редактор?
Пол Натан


Невдача ... (Ви отримали пошту в той самий момент, коли ви зробили знімок екрана.) Але це не дуже передова функція. Звичайно, це, мабуть, дуже корисно, але не дуже "вражає" (зовсім).
Андреас Рейбранд

@Andreas Rejbrand - Вибачте Андреас, але яка пошта? Який скріншот? Боюся, я не розумію, про що ти говориш.
Грак

@Rook: Він говорить про зображення у вашій відповіді та про синє поле внизу праворуч, яке, як видається, є повідомленням електронної пошти від Outlook. . .
Тім Гудман

4

Здатність ReSharper до рефактора. Повністю розкриваючись, я, можливо, опинився тут за кривою, оскільки думаю, що Java з Eclipse вже деякий час володіє таким функціоналом, але я регулярно не працюю з Java.

Дельта можливостей, яку додає ReSharper до Visual Studio, така велика, що неймовірно. Я знаю, що це звучить як реклама, але я не думаю, що я міг би повернутися до використання інсталяції Visual Studio без ReSharper на вершині.

Більш загально, семантичне розуміння коду щодня відбиває штани від простого старого текстового редактора. Це призводить до таких речей, як "знайти звички змінної" або "вбудована функція" або "можливість використовувати ідіоматичний шаблон" тощо.


Мені одного разу на роботі сказали: "Друзі не дозволяють друзям програмувати без ReSharper".
Френк Ширар

4

Налагоджувач Smalltalk:

  • Повний доступ до всього стека викликів (Яка зміна цього екземпляра об'єкта 3 відправника знизила стек?)
  • Відредагуйте тестовий код у відладчику, перезавантажте та продовжуйте виконання програми, як нічого не сталося.

Цілком нормально в Smalltalk витрачати більшу частину свого часу на написання коду всередині налагоджувача.

(Я пам'ятаю, як здували, запустивши метод, побачивши щось не так, змінивши його та запустивши метод знову, не перезавантажуючи додаток ще в той день, коли Visual Age для Java ... тому що VA4J був написаний у Visual Age для Smalltalk.)

Шукач методів Smalltalk

Finder методу дозволяє запитати "яке повідомлення я можу надіслати, щоб прийняти ці параметри та отримати цей результат?" Запитайте, 'abc'. 'def'. 'abcdeb'.і це вам каже 'abc' , 'def' --> 'abcdef'. Запитайте, #(0 1 2 3)і воно говорить #(0 1 2 3) sum --> 6. * Відправники, реалізатори - ви все, щоб знайти всіх (*) відправників повідомлення або всіх об'єктів, які реалізують це повідомлення.

(*) За винятком випадків, коли ви створюєте імена повідомлень під час виконання: self perform: (#foo, #bar)надсилати собі повідомлення #foobar- у такому випадку ви знаєте, що робите, і не заперечуєте проти потенціалу підняти себе на власний петард.


4

Чому лінія?

Whyline для Java дуже вразив мене, коли я побачив це. Це динамічний інструмент аналізу, який дозволяє задавати питання щодо виходу програми, причому не лише тексту, але й графіки. Наприклад, ви можете запитати "чому ця лінія була червоною?" або "чому метод фарби не викликали?"

Це працює, інструментуючи програму та записуючи пробіг. Наприклад, припустимо, ви можете відтворити помилку. Ви інструментуєте програму Whyline, запускаєте програму в Whyline, щоб відтворити помилку, а потім, коли ви виходите з програми, ви можете використовувати Whyline для перевірки історії виконання.

Це записування та відтворення не є новим, але те, як реалізує Whyline, це досить гладко. Ви можете переглядати історію відповідно до конкретних подій (наприклад, орієнтуючись лише на події перетягування миші або лише на події клавіатури). Він також пов'язує вихід з тією частиною програми, яку він надрукував, так що ви можете переходити від виводу до коду.

Для роботи він використовує програмне нарізання, щоб ви могли зосередити увагу на частинах коду, які є фактично актуальними. Зараз КМУ має патент на це, і я не знаю, які у них плани, але я сподіваюся, що ми зможемо побачити більше цього у виробництві. Це свиня для пам’яті, але це, мабуть, тому, що це прототип, і він може вдосконалюватися.

Ви повинні побачити демо в Інтернеті, але ви також повинні спробувати це для себе, щоб отримати повний досвід. Якщо що-небудь, то в Інтернеті демонстрація не реалізована.


3

Я думаю, що найбільш вражаюча функція IDE, яку я бачив, - це SyncEdit , який AFAIK доступний лише в Delphi.


Це не просто перейменування членів? Затьмарення робить це на місці. Редагувати: О, я бачу, ви можете це зробити в межах вибраного.
Метт Оленік

1
Eclipse також має його (користуйтеся ним постійно). Корисне - дуже. Магічне - не так точно.
серг

@Serg: О, Eclipse теж є? Я б не знав; Я не використовую Java. Я знаю, що у VS його немає ...
Мейсон Уілер

@Matt: Ви можете зробити це в межах виділення, і оскільки ви можете зробити це в межах виділення, ви можете зробити це через стільки файлів, скільки вам потрібно. Це не обмежене сферою дії та іншими обмеженнями, які аналізатор рефакторингу може надати для перейменування учасників.
Мейсон Уілер

У Netbeans це теж є. Зазвичай ctrl-r.
Алан Пірс

2

Що я хотів би побачити в IDE, це такі функції:

  • Відобразити код, як я звик (незалежно від того, як він насправді відформатований)
  • Дозволити вставляти таблиці (скажімо, таблицю розширення Excel, де я можу читати значення комірок sheet[A3]) та малюнки в коді та отримувати доступ до них так само, як і до будь-якої змінної.
  • Дозвольте опустити дужки та інший непотрібний код, який якраз є, щоб зробити синтаксичний розбір.
  • Пошук коду за допомогою Google-подібного двигуна (особливо отримання результатів пошуку протягом 35 мс)
  • Відображення складних ifумов у вигляді таблиці (все ще пошук посилання).
  • Інструменти рефакторингу, в яких можна знайти подібний код, витягнути відмінності та зменшити їх до макс.
  • Підтримка генерації коду, дотримуючись мовних правил (подумайте: Створіть усі геттери та сетери для класів Java, якщо метод з тим самим іменем вже не існує або не залежить від анотацій)

"Створіть усі геттери та сетери для класів Java, якщо метод з такою ж назвою вже не існує" Я думаю, що затемнення це робить ...
Hila

Чи сумісні цілі "Відобразити код так, як я звик" та "Дозволити пропускати дужки"?
TRiG

@Hila: Так, але код видно . Мені б хотілося, що компілятор просто генерує їх, коли компілює джерело Java; Я не хочу, щоб вони забивали джерело.
Аарон Дігулла

@TRiG: IMHO, між ними є велике перекриття. Я відступаю від усього свого коду; брекети абсолютно марні.
Аарон Дігулла

Якщо, можливо, IDE зберігає дужки, але не відображає їх, це може працювати.
TRiG

2

Перевірка типу динамічних мов

Поки ваш код не стане занадто «мета», IDE для Ruby або Python повинен мати можливість виконувати фонове завдання, яке:

  • для даної функції визначає всі можливі класи, які будуть передані як аргументи
  • для цих класів гарантує, що вони реагують на всі методи, на які посилається ця функція
  • представляє список несумісних класів із відсутніми методами, які потрібно реалізувати

Я ще не бачив IDE, який це робить.


Ви маєте на увазі, що ви не бачили ID R / P, який робить цю чи будь-яку IDE взагалі?
Марк C

Я ніколи цього ніколи не бачив, але теж не виглядав дуже важко.
AShelly

Роель Вуйтс 'RoelTyper і Лекс Споун' Чак зробили / зробили подібний аналіз для Squeak.
Френк Ширар

Це, мабуть, повинно бути побудоване на якійсь системі виводу типу, на мові, яка ніколи не була створена для виведення типу.
Лі Лі Райан


2

Автобудова Eclipse - це особливість, якою я найбільше захоплююся .... 7 років тому. Тепер я просто сприймаю це як належне.


Intellij лише отримує це завдяки v12.
Насправді,

2

Xcode 4 виправляє крапки з комою та друкарськими помилками та використовує стрілки, щоб показати, як сталася помилка.

Наприклад:

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

Стрілка буде намальована від [a release]до [a length]показати , чому ви не можете використовувати [a length].


Така поведінка знижується до статичного аналізатора клаксону. Ви можете запустити її як окрему команду і переглянути результат у браузері. Немає фантазійних стрілок.
Буде

1

Шаблони коду та розширення, такі як DevExpress 'CodeRush. В C #, aDependencyProperty - це головний біль для створення, оскільки синтаксис може отримати багатослівний, але просто введення "dp" відображає щось подібне до фрагмента, де ви вводите тип, ім'я та значення за замовчуванням, і все інше робиться - у т.ч. додавання будь-яких необхідних операторів "використання" та, можливо, посилань на проект, якщо використовується пам'ять.

Перевага полягає у створенні власних шаблонів, для коду ви часто використовуєте або переписуєте, наприклад, прості реалізації INotifyPropertyChangedвластивостей, де просто дайте шаблону ім'я та тип властивості (якщо інший розширювач не обробляє його), який ви хочете використовувати , і він обробляє решту, включаючи створення резервної змінної.


1

Pex робить кілька класних автоматизованих тестових поколінь. Він відстежує ваш код, визначає точки відділення, використовує умовний розв'язувач для генерування входів, які потрапляють у кожну можливу гілку, а потім дозволяє експортувати результати у вигляді повторюваних одиниць тестів. Це може принизити складний код обробки рядків.


Приємно! Хоча, я сподіваюсь, що він скоріше звикне до генерування даних, а не для повного тестового випадку ! [Тестові дані + Очікуваний результат = Тестовий випадок.] Тобто, автоматичне генерування очікуваного результату означає, що воно насправді не тестує те, що ви думаєте. Це потрібно перевірити тим, хто знає специфікацію.
Macneil

1

У Eclipse генерують SEtters та getters автоматично, аналогічно створюють методи в класі реалізації з інтерфейсу


1

Підтримка IntelliJ Idea JPA

Зазначте, що у вас є DatabaseEntity:

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

тепер у вас є деякі JPA-запити

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

через деякий час ви побачите, що ви зробили помилкову помилку в межах своєї Сутності, і ви вирішили перетворити лазерне ім'я на lastName .

Цей IDE також відновить запит JPA.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.