Як ви переміщуєтесь та кодом рефактора, написаним динамічною мовою?


14

Мені подобається, що для написання Python, Ruby або Javascript потрібна така маленька панель. Я люблю прості функціональні конструкції. Я люблю чистий і простий синтаксис.

Однак є три речі, на які я дуже поганий, коли розробляю велике програмне забезпечення динамічною мовою:

  • Навігація кодом
  • Ідентифікація інтерфейсів об'єктів, які я використовую
  • Ефективне рефакторинг

Я пробував прості редактори (тобто Vim), а також IDE (Eclipse + PyDev), але в обох випадках я відчуваю, що мені потрібно зробити набагато більше пам’яті та / або постійно «грепнути» і читати код, щоб ідентифікувати інтерфейси. Особливо це стосується роботи з великою базою кодів з кількома залежностями.

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

Я впевнений, що існує вирішення цих проблем. Як ви ефективно працюєте в Python, Ruby або Javascript?


Функції перейменування PyDev поки що для мене спрацювали чудово.

Відповіді:


3

Навігація кодом

Отримайте кращий редактор, ніж VIM.

Я використовую Komodo Edit.

Я відчуваю, що мені потрібно зробити більше пам'яті

Добре. Мислення - це добре. Я вважаю, що "навчання" зрештою призводить до "пам'яті".

Постійно "grep" і читайте код, щоб визначити інтерфейси.

Це типово. Якщо ви не можете їх згадати, то вони занадто складні, чи не так? Час спростити.

Просте важко створити. Але коли у вас виникають проблеми з запам'ятовуванням, це симптом поганого дизайну.

Я використовую grep. Це працює для мене. У моїй редакції Komodo є багато приємних пошуків. Так само робить Notepad ++

Ідентифікація інтерфейсів об'єктів, які я використовую

Док-рядки та help()функціонування функціонують. Я їх використовую. Щодня.

Ефективне рефакторинг ... стає дуже залежним від якості моїх тестових одиниць.

Це не новина. Це завжди було правдою, навіть статичною мовою.

Статичною мовою ми часто лінуємось, припускаючи, що - поки вона складена - це справді ймовірно, що це спрацює. Це явно помилково, але ми лінуємось.


Я впевнений, що існує вирішення цих проблем.

Це не "проблеми" і не потребують "обхідних шляхів".


Динамічна мова полягає саме в тому, щоб не знати типу об'єктів, якими ви маніпулюєте. Коли ви отримуєте параметр, ви припускаєте, що він визначає метод "quack ()" та "feathers ()", але ви не знаєте, де є документація (адже вони будуть мати кілька док-стрижнів у своїх кількох реалізаціях).

"не знаючи типу об'єктів"? Дійсно. Коли я проектую клієнт об'єкта, я знаю, який тип я спроектував.

Коли я визначаю послугу, яку використовують декілька клієнтів, тип "точний" не має значення, коли у мене визначений необхідний інтерфейс quack()і feathers().

Нарешті, у мене є цикл Read-Execute-Print-Loop та інші інструменти для визначення типу "точний" у рідкісних випадках, коли у мене є тонка проблема. Ось чим я фактично користуюся щодня.

>>> x = some_mystery_factory( some, args )
>>> type(x)
>>> dir(x)

Здається, не дуже складно - принаймні в Python - розкручувати тип об'єкта. Обов’язково динамічні мови мають REPL, що дозволяє досить легко бачити, що відбувається.

Ви також не знаєте очікуваного замовлення параметрів. Здається, IDE важко допомогти там.

Це не має особливого сенсу. help()працює.

І мій IDE часто може знайти визначення. Не завжди - деякі закручені динамічні конструкції можуть легко приховати базовий клас. У такому випадку я повинен насправді подумати над класом об'єкта, щоб знайти визначення методу. Звичайно, я пишу код, тому там мало (або ні) таємниці.


6
Я відчуваю, що можу стверджувати, що змушення більше приділяти пам’яті дає вам менше можливостей для мислення ...
Ніколь

@ Ренез: Запам'ятовування не є злим, якщо в інтерфейсах є якась схема або система.
S.Lott

1
Я погоджуюся з тим, що запам'ятовуючі інтерфейси @Renesis відводять мене від реального мислення. Мені було менше цікаво, як інший кодер у моїй команді вирішив замовити параметри. Те, що у великій кодовій базі використовується безліч різних бібліотек з різними стандартами іменування, нечасто, і часто неможливо або недоцільно спростити або уніфікувати ці компоненти.
Філіп Бодуен

Re: Строки Doc, вони добре, коли ви знаєте тип об'єкта, але часто цього немає, і вам доведеться це шукати.
Філіп Бодуен

1
грр ... немає кращого редактора, ніж Vim: P
Анто


1

Є компанія - JetBrains - автори ReSharper, TeamCity та IDEA. Нещодавно вони почали дивитися на динамічні мови і вже випустили свої інструменти для Python, PHP та Ruby.

Якість чудова. Це не інші плагіни для вашої улюбленої IDE, але повністю представлені IDE, і вони досить хороші для рефакторингу / навігації / налагодження тощо - вони схожі на IDEA lite.

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