Rubyを学習していて、タイピングに関する大きな概念上の問題があります。なぜ私がパラダイムで理解できないのかを詳しく説明できます。Ruby Duck Typingで作業するには
私はRubyのように簡潔なコードのためのメソッド連鎖です。チェーン内の各メソッドの戻り値の型を正確に知る必要があります。そうでなければ、次のリンクでどのメソッドが利用できるのか分かりません。毎回メソッドのドキュメントをチェックする必要がありますか?私はこの常時実行されているチュートリアルの演習に取り掛かります。私は、参照、推論、実行、失敗、修正、反復のプロセスに悩まされているようで、コーディング中に何を処理しているのか正確に知っているわけではありません。これはRubyの直感性の約束に直面しています。
私はサードパーティ製のライブラリを使用していますが、もう一度パラメータを渡すことができるタイプがわかっている必要があります。それ以外の場合は失敗します。コードを見ることができますが、メソッドが期待しているタイプのコメントや宣言がある場合とない場合があります。私はメソッドがオブジェクトではなく、タイプで利用可能に基づいてコードを理解しています。しかし、パラメータとして渡すものは、ライブラリが期待するすべてのメソッドを持っていることを確認しなければならないので、型チェックを行う必要があります。私はすべてを祈り、祈る必要がありますか?私は文字列、ハッシュ、クラスなどを与えることが期待されるかどうかを知るために、インターフェイス上で適切に文書化されていますか?
方法のソースを見ると呼び出されるメソッドのリストを取得し、予想される型を推測しますが、分析を実行する必要があります。
Ruby and duck typing: design by contract impossible?
前のstackoverflowの問題の議論は、本当に、それらのプロセスが標準としていないようだ「あなたが従わなければならないプロセスがある」以外は何も答えていない、誰もが上の異なる意見を持っていますどのようなプロセスに従うべきであり、その言語には強制はありません。メソッドの検証?テスト駆動型設計?文書化されたAPI?厳密なメソッドの命名規則標準とは何ですか?私は何に従うのですか?これらのガイドラインはこの懸念を解決するでしょうかhttps://stackoverflow.com/questions/616037/ruby-coding-style-guidelines?助ける編集者はいますか?
概念的に私は利点も得られません。呼び出されるメソッドにはどのメソッドが必要であるかを知る必要があるため、何かを記述するときには何も入力しません。あなたがそれを文書化することを決めた場合を除いて、あなたは言語や他の人に明示的に通知するだけではありません。それでは、コーディング中ではなく、実行時にすべての型チェックをしているところです。私はPHPとPythonのプログラミングを行ってきましたが、私はそれを理解していません。
私は何かが分からない、または理解していないのですか?このパラダイムを理解するのを手伝ってください。
ダックタイピングには確かに利点がありますが、もちろん欠点もあります。 'a.responds_to?(:bar)'のように 'a.bar'を呼び出す' foo(a) 'メソッドに*オブジェクトを渡すことができます。それはすばらしい。インタフェースもジェネリックもなく、メソッド 'bar'を追加して実行します。もちろん、静的型付けには多くの利点があります。両方のことを理解するためにRubyの方法でいくつかの経験が必要なように思えます。また、インテリセンス(または同様の機能)によって少し甘やかされたかもしれないように聞こえます。多くの(*多くの*)私たちは文書を早く、頻繁にチェックする必要があります。 –
直感は訓練の結果であり、あなたがそれを使用するように訓練するまで直感的なことはありません。 –
この質問には「TL; DR」があります。あなたがそれを要約して残りを捨てるのに役立つでしょう。さもなければそれは広すぎます。 「これは、Rubyの直観性の約束に直面している」誰に直観性? Matz氏は、それが直感的であるように設計されており、十分に使い慣れた他の人に直感的になると考えていると語っています。誰にも直感的な言語を作成することは不可能なので、彼の目標はスポットです。 –