「変数に型がない」はメリットなのか、それともデメリットなのか。story「変数に型がない」はメリットなのか、それともデメリットなのか。曰く、プログラミング言語どうしの優劣を比較する「宗教戦争」は定期的に勃発するが、今回話題になっているのは「変数に型がない」ことはメリットなのか、それともデメリットなのか、という点だ。入門とは」というブログの「変数に型がないということの利点について考える」という記事。テンプレートのような機能も必要がない」などが挙げられている。これに対し、「型がないというのはデメリットだ」という意見もコメントやはてなブックマークで多数寄せられている。型がないデメリットとしてあげられているのは、「コンパイル時に型の不整合を検出できない」「型がある言語でも型推論を使えば記述量を減らせる」「保守性が高くなる」などのようだ。キャスト地獄を味わったことがある体験から、近年は変数に型のない言語のほうが好みにはなっているのだが、十分かつできの良い仕様書があってそれを元にコードを書くのなら型ありの言語も良いとは思う。次期PHPでは、引数や返り値のスカラー型宣言が可能に長く使えるWeb開発言語のおすすめは?この議論は賞味期限が切れたので、アーカイブ化されています。新たにコメントを付けることはできません。「変数に型がない」はメリットなのか、それともデメリットなのか。キャスト地獄を味わったことがある経験からそれって型の有無によるメリットデメリット以前に、適切なクラス設計が出来ていないのでは...ちゃんとクラス設計出来ているのにキャスト『地獄』とまで言うような状況になることってあるのだろうか。(#2334950)せっかくの型チェックが形無しだな。(#2334973)「それはお前の使い方が悪いんだ、適切にやれば問題はおきない」と言う人が出るのも、この手の宗教論争の定番ですね。(#2335121)そして事実そうであっても、初心者や老害(やマネージャーや経営者や顧客)には全く理解されないことも定番なのです。「だからね」三浦マネージャは子供に言い聞かせるようにゆっくり言った。――いやいやいや、それは違うでしょう。型の違いと、インターフェイスと具象クラスの違いをごっちゃにしてます。「ArrayListを使うんなら、素直にArrayListで宣言すればいいじゃない。>どうしてわざわざこういう分かりにくいことをするかなあ。カッコつけか?」みたいな感じで。日記プロトタイピングや、アジャイルな開発をしていると、クラスの整理法をガラリと変えないといけない時がたまに来ます。そんな時、型なしだとちょっとずつの変更が楽なんですが、型有りだと、全コード書き直しに近い再設計が待っています。それをごまかすためのキャスト地獄ということは、経験があります。はじめから仕様がかっちりしているのなら、地獄に陥らないように設計できますが。型なしで中途半端に変更したままにほっておくと、後々スパゲッティ同然の理解不能コードが出来上がるわけですが。「リリースする時は静的型システムのある言語で書き直すから問題ないよね!」なんて言って、本当に書き直したことってどれくらいあるんだろう?#身近な事例では、書き直しが必要でありながら実際に書き直した例は見たことが無い。(#2349423)ずっと疑問なんですが、なぜ最初から型無し型付け両方に対応した言語で書かないのかわかりません。型なし版を書いて、動いたらそのまま型宣言をつければいいだけのこと。バージョン管理しておいて、プロトタイピングに戻りたくなったら型なしバージョンに戻せばいい。型なしを許容するけど、型をつけると早くなるというのが一番ですよ。ついでに言えば、型をつければネイティブに静的型付けでコンパイルしてくれる言語。外部の問題のせいで型を書き換えまくる必要が出るというのは、スパゲッティみたいに依存しまくったクラス設計のせいだとは思いますが・・・。個人的には、そうなる(型なし言語で作っているけど、型あり言語に素直に移行できるように、採集t系には持っていく)ようにしている。静的型あり言語に移行できるかどうかをチェックしてくれる機構が欲しい。日記リファクタリングするときに、まずあるクラス群を整理して、次に別のクラス群を整理していく、ということをやったりしません?そういう時には、スパゲッティにはならない(やろうと思えばなりますが)で整理できると思うのだが。この方法が万能ではないけれど、個人的には有用。(#2335094)プロセッサが演算するのにいちばん都合の良いビット数か、もしくは、コンパイラを実装するのにいちばん都合の良いビット数です。すると、それは8の倍数ですらないかもしれません。(#2334933)これはあれか、仮定が偽の命題は恒真ってヤツ?仕様書なんて常に不足しているか間違っているかのどちらか(たいていは両方)だろ。ここにコードを書いてください。(#2335050)IDEの性能にもよるのでしょうが、型情報があった方がコードの補完が効くのでお手軽にコーディングできると感じています。型がない場合、確かに記述量は短くなるのかもしれないですけど、どう記述すればいいのかマニュアル見ないといけなかったりして面倒に感じることはあります。悩まなくて済むだけでもありがたい。「型がない」ポリシーを貫いてもらえばいいのだが中には「デフォルト型変換」というものを持つのもあり・・・。「デフォルト型は数値型」という言語で文字列比較をした場合、頭に空白や0を付加していてもTrueになるという、とんでもない事例がありました。十分かつできの良い仕様書があってそれを元にコードを書くのなら型ありの言語も良いとは思う。(#2334967)一般論として型がある方が実行効率に優れると思ってるんですが、いまどきのリソース潤沢な環境だとんなの論点にはならないんですかねえ。コーディング上の理由だけじゃなくてさ。(#2335103)んなことはないと思う。Javaの高いパフォーマンスを支えてるのが静的型システムで、サーバーサイドでパフォーマンスが欲しい分野だとJavaがデファクトスタンダードになる理由の一つだ。型システムの有効性も理解できない程度の人が、静的型システムとVMのパフォーマンスとの関係など理解できるはずも無く、議論に登ることも無いだけでは。(#2334986)お手軽な言語でちょっとしたものなら型がないほうが扱いやすいと思うしお堅いモノをつくるならキッチリしてたほうがいいと思うしプログラムはあくまで道具なので作るものにあわせて用途を選べばいいんじゃないかと思う。ホームページ仰ることはわかる...のですが、小規模なモノがサクッと書けるだけが動的型付けのメリットではないと思います。Railsでよく使われるORマッパーであるActiveRecord。Rubyにおける型が動的であるがゆえに、簡潔なのに強力な使い勝手を実現しています。これは、動的型付け言語であるRubyのメタプログラミングや柔軟なクラス実装ができる特長によるものです。RoRは、Rubyの特長に依存しており、不可分なのです。大規模なRoRがRubyで実装されていることや、RoRでそこそこ大規模なWebサービスが作れることこそが、その証明であると思います。一長一短で、適材適所であることは同意です。そこを鋭い目で見分ける勘が重要。シェア親コメントAS3.0は型宣言が必須になって一瞬泡食ったっけ。日記Flashの簡単の場合は、型宣言ない方が使いよいんだがなー。型宣言必須ってのは、やっぱりTPOに合わせられなくって面倒かなあ。スクリプト的な簡単かつ汎用的な物なら、型宣言なしでぶち込めた方が便利だろうしなあ。Re:AS3.0は型宣言が必須になって一瞬泡食ったっけ。日記そもそも,flexを含むflashベースのアプリを作るって言うのは「Win/Mac両対応かつ,そんなに予算がない場合で,そんなに複雑じゃないやつ」なので,厳密な型宣言にされるよりは,ある程度なんとなく動いてくれる方がよいんだけどねえ。社内何でも屋を標榜する私めには「目的がラクに達成されるなら,多少のアレは許される」のである。日頃如何にたるんでいたかを再認識すると共に,「他の使うことにしよう」と思ったきっかけですな。現状は開発環境はQtに落ち着いておるですよ。日記スポーツカーとワゴン車、どっちがいいかっていう話と似ているような。日記てことは、次に出てくるのはスポーティーなワゴン()。シェア親コメントなんだホンダ車か。日記たいとるおんりー?シェア親コメントRe:なんだホンダ車か。「スピードワゴンはクールに去るぜ」じゃないの?シェア親コメントRe:なんだホンダ車か。日記159は全然売れなかったよ。売れたのはスポーツワゴン(後に156スポーツワゴンに改名)。暗黙の型変換があるからなー。日記まあ、宗教戦争なので所詮個人の好みの問題でしかないとは思いますが・・・お手軽にプログラミングするなら型がない方がいいとはおもいます。プログラミング技術のコモディティ化にもすごく貢献してると思われます。変数の型がない言語で書かれたミドルウェアには若干の不安を覚えますね。言語仕様というよりもインタプリタの問題の気もしますけど。若者が楽しそうにやっとるじゃないか。(#2335017)この手の話はLisper連中が、30年くらい前にさんざんやってたね。Lispは見ての通り、中途半端な蝙蝠状態なわけだが。(#2335033)個人的見解ですが、動的型付けだと規模が大きい、というかもうそれこそ2人以上からのレベルで「こうさせたくない」という意思表示が難しくなるのでちょっといやだなという印象です。ダック・タイピングでヒャッハー解釈されたそれこそ目も当てられない(ノ∀`)アチャーなので、そういう局面ではコメントで「絶対するなよ、絶対だぞ」と書いているのに、後年のサポートでそれを無視したあげくに落ちるんですけど的なご指摘が。casting/convertとか)に対するテスト工数が含まれていない気がしてなりませんし、逆に、それをしっかりやるためにドキュメントやテストをがっちりやろうとすると、「なんで動的型付け言語(LL)なのにそんなに時間かかるん?」とかestimation時に言われてがっかりします。自分がコードを書くなら容易に組めるので型は不要、他人のコードを読むなら情報や制約がわかりやすい型は必要。他人がどう思おうが勝手だが、部下や上司には居て欲しくない。私は強めの型制約言語が好きです。(#2335062)静的型付けではない言語だとIntelliSense的なコード補完が不完全か、あるいは、不可能なので、静的型付け言語の方がうれしいです。いう簡単な意見が意外とないのが不思議。(#2334945)記述する人間からみたら、暗黙の了解で宜しくやってね。型情報は処理系にお任せにしたい。暗黙の了解で実行したら、ちがう、そうぢゃない、となることもある。処理系の実装からしたら、実行の効率化のため付加情報として型もほしい。記述効率、デバッグ効率、実行効率、を勘案して、バランスの取れるところに落ち着く。様は適材適所だが、そのバランスを測るのは難しいけど人間様がやるしかない。プロトタイプは形無しでやっつけてみて、効率化(ハンド最適化)は型情報を与えて人間がやるとか、その辺がシームレスにできたらいいんじゃないかな。「型よ、あってくれー!」と、心の叫び。(#2335004)スクリプト言語が効率いいって前提に異論が出てるのに、こういうこうとを言う人がいるからループして「宗教論争」になるんだろうな。現在のコンピュータの性質とか、能力の限界によるものと思ってるので現在はベターな手法だけど、将来は改善されるかもしれない。(#2335078)これはひどい信者。親切なコメントをくれた人に対してその感想とか...。(#2335107)仕様に曖昧さがなく、途中で変わらないってことでしょう。最初に型を定義しなくてはいけない静的言語は不利になると。C++の設計者であるストラウトラシップも「抽象化は遅れてくるプロセスだ」って言ってますね。具体事象を抽象した存在であるところの型は、具体事象が不明確だったり変動する場合には適切に定義できないということだと思います。最初にコンパイルを通せるところまで型を厳密に定義する必要がない分、仕様が曖昧な状況では動的言語が有利だと。現実には仕様が曖昧なケースも多いわけで、まあ理解できる意見だと思います。[microsoft.com]でどうぞ。null;こんな使い方ができる。(#2335480)Maybeモナドの考え方だ。(#2335503)>例えばJavaだとどっかから拾ってきたライブラリのクラスが必要なインターフェースを実装してなくて泣きながらアダプタを書くことがよくあるわけです>その点、動的型ならずっと自由度が高いダウト。インターフェースが実装されてなければ、それは当然実行時エラーになるだけ。エラーを見逃しやすいという致命的なデメリットですよ、それは。型が無い(以下無限地獄)シェア親コメントより多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。Delete残りのコメントを取得50/193コメントを表示タレコむ私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。service.閉じるスラド読み込み中...。