動的言語で書かれたコードをどのようにナビゲートしてリファクタリングしますか?


14

Python、Ruby、またはJavascriptを書くのに必要なボイラープレートが非常に少ないことが大好きです。シンプルな機能的構成が大好きです。簡潔でシンプルな構文が大好きです。

ただし、動的言語で大規模なソフトウェアを開発するとき、私が本当に苦手な点が3つあります。

  • コードのナビゲート
  • 使用しているオブジェクトのインターフェイスを特定する
  • 効率的なリファクタリング

IDE(Eclipse + PyDev)と同様にシンプルなエディター(Vim)を試してきましたが、どちらの場合も、より多くのことをメモリにコミットする必要があります。インターフェース。これは、複数の依存関係を持つ大きなコードベースで作業する場合に特に当てはまります。

メソッド名の変更などのリファクタリングに関しては、単体テストの品質に大きく依存します。そして、アプリケーションの残りの部分を「カット」することによってユニットテストを分離しようとすると、スタブのインターフェイスがスタブしているオブジェクトに対して最新の状態に保たれるという保証はありません。

これらの問題には回避策があると確信しています。Python、Ruby、Javascriptでどのように効率的に作業しますか?


PyDevの名前変更機能は、これまでのところ私にとってはうまくいきました。

回答:


3

コードのナビゲート

VIMよりも優れたエディターを入手してください。

私はKomodo Editを使用しています。

もっともっとメモリにコミットしなければならない気がする

良い。考えるのは良いことです。「学習」が最終的に「記憶」につながることがわかりました。

常に「grep」を実行し、コードを読んでインターフェイスを特定します。

これは典型的なものです。それらを覚えていない場合は、複雑すぎますか?簡素化する時間。

シンプルは作成が難しいです。しかし、思い出すのに苦労するとき、それは悪い設計の徴候です。

grepを使用します。わたしにはできる。私のKomodo Editにはたくさんの素敵な検索機能があります。Notepad ++も同様です

使用しているオブジェクトのインターフェイスを特定する

Doc Stringsとhelp()関数が機能します。私はそれらを使用します。毎日。

リファクタリングの効率化...単体テストの品質に大きく依存します。

それはニュースではありません。静的言語であっても、それは常に真実です。

静的言語では、コンパイルされる限り、実際に動作する可能性が高いと仮定して、しばしば怠け者になります。これは明らかに偽ですが、怠け者になります。


これらの問題には回避策があると確信しています。

これらは「問題」ではなく、「回避策」を必要としません。


動的言語とは、操作するオブジェクトのタイプを正確に知らないことです。パラメーターを受け取ると、「quack()」および「feathers()」メソッドが定義されていると想定しますが、ドキュメントの場所はわかりません(実際、複数の実装に複数のdocstringがあります)。

「オブジェクトのタイプを知らない」?本当に。オブジェクトのクライアントを設計するとき、どのタイプを設計したかがわかります。

私は複数のクライアントで使用されるサービスを、定義すると、私は必要なインタフェースを定義したとき、「正確な」タイプは、関係ありませんquack()feathers()

最後に、微妙な問題が発生するまれなケースで「正確な」タイプを判別するためのRead-Execute-Print-Loopなどのツールがあります。それが私が実際に毎日使っていることです。

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

少なくともPythonでは、オブジェクトの型をほどくのはそれほど難しくないようです。動的言語にはREPLが必要であり、何が起こっているのかを簡単に確認できます。

予想されるパラメーターの順序もわかりません。IDEがそこを支援するのは難しいようです。

それはあまり意味がありません。 help()動作します。

そして、私のIDEはしばしば定義を見つけることができます。常にではありません-一部の複雑な動的構成体は、基本クラスを簡単に隠すことができます。その場合、メソッド定義を見つけるためにオブジェクトのクラスを実際に考えなければなりません。もちろん、私はコードを書いているので、そこにはほとんど(またはまったく)謎はありません。


6
私はメモリにもっとコミットすることを余儀なくされていると主張することができように私はあなたに与え感じる少ない ...思考のための能力を
ニコール

@Renesis:インターフェースに何らかのパターンまたはシステムがあれば、暗記は悪ではありません。
S.Lott

1
インターフェイスを記憶する@Renesisは、私の考えを本当の思考から遠ざけることに同意します。私のチームの他のコーダーがどのようにパラメーターを注文するかを気にすることはありませんでした。大規模なコードベースがさまざまな命名標準の多くの異なるライブラリを使用するという事実はめったになく、これらのコンポーネントを単純化または統合することは不可能または非現実的であることがよくあります。
フィリップボードイン

Re:Doc文字列。オブジェクトのタイプがわかっていれば問題ありませんが、よくわからないので、調べる必要があります。
フィリップボードイン

1
grr ... Vimほど優れたエディタはありません:P
Anto


1

会社があります- ジェットブレーンズ社 - ReSharperの、チームシティーとIDEAの著者は。彼らは最近、動的言語に目を向け始め、既にPython、PHP、Ruby用のツールをリリースしました。

品質は素晴らしいです。これらはお気に入りのIDE用の別のプラグインではありませんが、フル機能のIDEであり、リファクタリング/ナビゲーション/デバッグなどに非常に適しています-IDEA liteのようなものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.