<< 竹宮惠子「地球へ...」のアニメ化 : main : JR発足20周年・青春18きっぷ >>

変数宣言が無くても大丈夫?

プログラミング言語のPython, Rubyに共通の特徴としてC, Java等にある変数宣言が無いことを挙げられる.これまで自分にはこれがバグの温床となりそうで気持ち悪く,それ故これらには手を出さなかった,

しかし最近は動的言語が開発効率の高さにおいて注目されている.

この矛盾について一応自分なりに出した結論は
* 型付けの強さである程度保証できる
* 開発環境による保証を前提とすればよい
参考記事
まつもとゆきひろのプログラミング言語論
境界を越える: Javaモデルを超える型定義戦略

変数宣言のある言語として,C, C++, Java, (Perl), (VisualBasic), (JavaScript), PHP等が挙げられる.()は必須ではないことを意味する.

さて,一言で変数宣言といってもC, C++, JavaのそれとVisualBasic,JavaScript, Perlのそれは性質が異なる.前者は入れ物に型が付いているので,入れ物を明示的に用意しないと使うことが出来ない.後者では宣言は本当に使うという宣言に過ぎず(VisualBasicのVariantを含む),使おうと思えば宣言しなくても使える.

無くても良い物を使う理由はスコープである.元々スコープの考え方が無く,変数が全てグローバルなところから出発した言語,あるいは利便性を重視してグローバルスコープが優先される言語ではローカル変数を明示する記号が必要だ.一般的にグローバル変数の使用は良くないと言われており,宣言の強制はグローバル変数の安易な利用を防止するものであろう.そして宣言を強制することでもう一つの効果である変数名誤りの防止効果が現れる.

バグの中でも最悪なのは期待通りに動かないけど何もエラーが出ないパターン.エラーが出ればそこを見ればよいが,誤ったまま先に進んで最後に気付くようだとどこで間違ったのか見当が付かない.そして,ありがちなミスがスペルミスと変数名誤り.変数名誤りは他のコードを流用したり,気が変わって変数名を変えたりすると発生する.こうなると入れたはずの値が取り出されず,わかりにくいバグとなる.

例えばPerlの場合,最初に参照された場合に中身が空であると勝手に解釈してくれる.そのため,例えばcccに値を入れて,取り出すときに誤ってcceとしても黙って空の値(厳密にはundefだが,文脈によって0にも""にも変わる)を渡してくれる.

Perlでuse strictを使うと,宣言されていない変数へのアクセスが全てコンパイルエラーとなる.自分はこのuse strictとperl -cwを使ってCと同じように最初にコンパイルエラーが出ないことを確認してから実行している.ちなみにuse strictを使わない場合でもperl -cwでは1回しか使われていない変数に対してミススペルの可能性が高いことを警告してくれる.

同様の機能としてVisual BasicにはOption Explicitが用意されている.

JavaScriptは慣れていないので突っ込んだことは言えないのだが,言語上は宣言無しでグローバル変数を使える機能を防ぐことはできなさそうだ.JSLintを使って変数をリストアップすれば,実行前の発見もかろうじて出来そうである.



PythonやRubyには基本的には変数宣言が存在しない.Pythonにはglobalという宣言が存在するが,宣言せずに使えばローカル変数になるので普通は宣言しない.Rubyはスコープを変数の接頭記号で区別するので宣言は全くない.では,どうやって安全性を保ってプログラムが作れるのだろうか.PythonやRubyを使った場合にどうなるかをPerlと比較してみようと思う.

結論の1つめである「型付けの強さ」について.Perlでは未定義の変数を参照した場合に良きに計らってくれることは上で述べた.それに対してRuby及びPythonは強い型付けが行われているので未定義は他の値に自動変換されない.使われていない変数をいきなり参照したらエラーとして検出されるので,値を渡したつもりで0だったという間違いはおおむね回避できる.(JavaScriptも初期値に関しては同様).しかし代入文で代入先を誤ったらその先は全滅だ.

そこでいろいろ考えた挙げ句,2つめの「開発環境による保証」に行き着いた.端的に言えばプログラムの正確性を保証するのは言語仕様ではなく開発環境の責任で行うべきという考え方である.

プログラムを書くときはどのような環境を使っているだろうか.お気に入りのエディタか.与えられた統合環境か.まさかメモ帳という人は(プログラミングを始めたばかりでなければ)いないだろう.

ここで,例えば補完機能があるエディタでは補完機能を最大限使うことでミススペル問題はある程度避けられる.あるはずの名前が候補に出てこなかったり紛らわしい物が2つ候補に出たりすればミススペルの可能性が高い.ただ,これだけでは変数名誤りは検出できない.

もっと考えを進めてみよう.例えば最初に使われた変数とそれ以外の変数を別の色で表示するエディタや,変数の一覧を常時近くに表示してくれるエディタがあれば変数名の誤りに直ちに気付くだろう.そのとき変数宣言は行数を増やすだけの冗長な代物に成り下がる.

たとえて言えば(極端な例だが),地雷を避けて進める装置があれば安全な道を遠回りするより地雷原を真っ直ぐ進んだ方が早い,といった感じだろうか.しかし裏を返せば,その装置を持たない人は真似をせずに安全な道を歩くべきとも言える.



現実問題として複数のプログラミング言語を使う身としては使い慣れたエディタをいつも使いたい.この2つの要求が矛盾しないためには,エディタには(色分けにとどまらず)言語に特化したお助け機能を豊富に用意することが必要であろう.



2009/12/29追記
python 用 lint、Pyflakes vs. pyChecker vs. pylint - 傀儡師の館.Python - 楽天ブログ(Blog)
コンピュータ > ソフトウェア : comments (280) : trackbacks (0)

Comments

hermes outlet online store にょろぷにらん | 変数宣言が無くても大丈夫?
replicas cinto hermes...2013/11/24 08:13 AM
replica gucci men belts にょろぷにらん | 変数宣言が無くても大丈夫?
best replica gucci backpack...2013/11/21 11:25 PM
hermes birkin bag tasche 30 togo gold palladium handtasche にょろぷにらん | 変数宣言が無くても大丈夫?
fake hermes france...2013/11/21 11:11 PM
replica gucci in china にょろぷにらん | 変数宣言が無くても大丈夫?
replica of gucci...2013/11/20 10:42 PM
replica hermes birkin canvas にょろぷにらん | 変数宣言が無くても大丈夫?
replica hermes europe...2013/11/20 08:51 PM
replica gucci canvas handbags にょろぷにらん | 変数宣言が無くても大丈夫?
replica gucci luggage set...2013/11/20 05:40 PM
where to buy replica hermes birkin にょろぷにらん | 変数宣言が無くても大丈夫?
hermes fake hardware...2013/11/20 01:23 PM
hermes fake loai 1 にょろぷにらん | 変数宣言が無くても大丈夫?
fake birkin bag buy...2013/11/18 04:36 PM
fake gucci belts online にょろぷにらん | 変数宣言が無くても大丈夫?
fake gucci messenger bag...2013/11/17 10:08 PM
replica gucci bags 2012 にょろぷにらん | 変数宣言が無くても大丈夫?
replica gucci belts china...2013/11/15 08:59 PM
hermes replica for men にょろぷにらん | 変数宣言が無くても大丈夫?
hermes designer handbags replicas...2013/11/15 08:12 AM
fake gucci necktie にょろぷにらん | 変数宣言が無くても大丈夫?
replica gucci areia thong sandals...2013/11/14 01:59 PM
fake gucci belts free shipping にょろぷにらん | 変数宣言が無くても大丈夫?
gucci schuhe...2013/11/14 08:47 AM
knock off gucci handbags 2010 にょろぷにらん | 変数宣言が無くても大丈夫?
gucci handbags replica luxury...2013/11/13 05:39 PM
fake gucci bag cheap にょろぷにらん | 変数宣言が無くても大丈夫?
fake gucci backpacks for men...2013/11/13 03:26 AM
gucci fake designer bags にょろぷにらん | 変数宣言が無くても大丈夫?
gucci outlet stores fake...2013/11/12 12:34 PM
replica gucci bags 2011 にょろぷにらん | 変数宣言が無くても大丈夫?
fake gucci purses for sale...2013/11/11 09:35 AM
fake gucci bag pictures にょろぷにらん | 変数宣言が無くても大丈夫?
replica gucci bum bag...2013/11/10 09:21 PM
replica gucci handbags wholesale にょろぷにらん | 変数宣言が無くても大丈夫?
replica gucci neckties...2013/11/10 01:46 PM
fake gucci material にょろぷにらん | 変数宣言が無くても大丈夫?
replica gucci ipad...2013/11/10 03:04 AM
buy gucci wallets online にょろぷにらん | 変数宣言が無くても大丈夫?
good replica gucci handbags...2013/11/10 02:28 AM
hermes fake and authentic にょろぷにらん | 変数宣言が無くても大丈夫?
replica hermes dog collar...2013/11/10 12:32 AM
replica gucci underwear にょろぷにらん | 変数宣言が無くても大丈夫?
gucci replica grade aaa...2013/11/09 11:51 PM
7 star replica gucci handbags にょろぷにらん | 変数宣言が無くても大丈夫?
gucci jackie bag fake...2013/11/08 11:18 PM
replica hermes birkin bags にょろぷにらん | 変数宣言が無くても大丈夫?
hermes birkin bag replica ebay...2013/11/08 01:09 AM
fake hermes porcelain にょろぷにらん | 変数宣言が無くても大丈夫?
fake hermes dogon...2013/11/07 03:20 PM
replica gucci tote bag にょろぷにらん | 変数宣言が無くても大丈夫?
replica gucci handbags uk...2013/11/06 09:19 AM
hermes h bag replica にょろぷにらん | 変数宣言が無くても大丈夫?
replica hermes wallet...2013/11/05 08:48 PM
gucci 2846 replica にょろぷにらん | 変数宣言が無くても大丈夫?
fake gucci tags...2013/11/05 07:27 PM
cheap aaa replica gucci belts にょろぷにらん | 変数宣言が無くても大丈夫?
best replica gucci handbags...2013/11/05 04:35 AM
hermes birkin fake 1 にょろぷにらん | 変数宣言が無くても大丈夫?
tui xach hermes fake...2013/11/05 02:04 AM
buy replica louis vuitton wallet にょろぷにらん | 変数宣言が無くても大丈夫?
replica louis vuitton...2013/11/04 10:20 AM
replica hermes ostrich にょろぷにらん | 変数宣言が無くても大丈夫?
replica hermes bags paypal...2013/11/04 06:17 AM
hermes outlet online uk にょろぷにらん | 変数宣言が無くても大丈夫?
fake hermes bag cheap...2013/11/03 11:34 AM
aaa replica gucci jackets にょろぷにらん | 変数宣言が無くても大丈夫?
replica gucci bags cheap...2013/11/03 09:39 AM
fake hermes riding boots にょろぷにらん | 変数宣言が無くても大丈夫?
hermes so black birkin replica...2013/11/03 08:49 AM
hermes handbags replica uk にょろぷにらん | 変数宣言が無くても大丈夫?
good fake hermes birkin...2013/11/02 07:42 AM
louis vuitton monogram vernis replica handbags にょろぷにらん | 変数宣言が無くても大丈夫?
replica louis vuitton...2013/10/31 07:47 PM
louis vuitton replica china bags にょろぷにらん | 変数宣言が無くても大丈夫?
louis vuitton replica...2013/10/31 06:06 AM
replica louis vuitton loafers for men にょろぷにらん | 変数宣言が無くても大丈夫?
louis vuitton replica...2013/10/26 08:53 AM
louis vuitton replica belts for men にょろぷにらん | 変数宣言が無くても大丈夫?
replica louis vuitton...2013/10/26 07:34 AM
cheap aaa replica louis vuitton にょろぷにらん | 変数宣言が無くても大丈夫?
replica louis vuitton...2013/10/26 02:07 AM
hermes handbags outlet online にょろぷにらん | 変数宣言が無くても大丈夫?
true replica hermes reviews...2013/10/26 12:36 AM
louis vuitton luggage set replica cheap にょろぷにらん | 変数宣言が無くても大丈夫?
replica louis vuitton...2013/10/25 10:24 PM
louis vuitton wallet replica cheap にょろぷにらん | 変数宣言が無くても大丈夫?
louis vuitton replica...2013/10/25 08:00 PM
sale nike にょろぷにらん | 変数宣言が無くても大丈夫?
mbt shoes...2013/10/25 07:15 AM
replica gucci womens clothes にょろぷにらん | 変数宣言が無くても大丈夫?
fake gucci hats...2013/10/25 01:56 AM
fake gucci bag china にょろぷにらん | 変数宣言が無くても大丈夫?
fake gucci 1622...2013/10/24 06:42 PM
11x11x11 magic cube にょろぷにらん | 変数宣言が無くても大丈夫?
magic cube...2013/10/24 05:54 PM
louis vuitton replica handbags philippines にょろぷにらん | 変数宣言が無くても大丈夫?
louis vuitton outlet...2013/10/24 07:43 AM
hermes constance bag replica にょろぷにらん | 変数宣言が無くても大丈夫?
fake hermes picotin bag...2013/10/24 05:33 AM
mbt staka chocolate にょろぷにらん | 変数宣言が無くても大丈夫?
mbt shoes online...2013/10/24 01:41 AM
replica gucci mens backpack にょろぷにらん | 変数宣言が無くても大丈夫?
gucci replica jewelry china...2013/10/23 06:45 PM
replica hermes tote にょろぷにらん | 変数宣言が無くても大丈夫?
hermes replica garden party...2013/10/23 02:52 PM
gucci pelham bag replica にょろぷにらん | 変数宣言が無くても大丈夫?
replica gucci handbags usa...2013/10/23 10:19 AM
perfect hermes birkin replica にょろぷにらん | 変数宣言が無くても大丈夫?
jody claman sells fake hermes...2013/10/23 10:13 AM
louis vuitton evidence replica kopen にょろぷにらん | 変数宣言が無くても大丈夫?
louis vuitton replica...2013/10/23 05:59 AM
kids shoes online にょろぷにらん | 変数宣言が無くても大丈夫?
cheap mbt shoes 73...2013/10/23 12:58 AM
hermes quentin replica にょろぷにらん | 変数宣言が無くても大丈夫?
hermes kelly...2013/10/22 02:37 PM
fake gucci flats にょろぷにらん | 変数宣言が無くても大丈夫?
fake cheap gucci clothes...2013/10/22 12:41 AM
louis vuitton belt replica us にょろぷにらん | 変数宣言が無くても大丈夫?
louis vuitton luggage on sale...2013/10/21 07:53 PM
louis vuitton replica handbags cheap にょろぷにらん | 変数宣言が無くても大丈夫?
louis vuitton outlet...2013/10/21 07:03 PM
replica louis vuitton presidential briefcase にょろぷにらん | 変数宣言が無くても大丈夫?
louis vuitton replica belt china...2013/10/21 02:23 PM
hermes jumping boots replica にょろぷにらん | 変数宣言が無くても大丈夫?
replica hermes bolide bag...2013/10/21 08:23 AM
mbt kabisa china にょろぷにらん | 変数宣言が無くても大丈夫?
women's mbt dress shoes...2013/10/20 07:55 PM
replica hermes tie にょろぷにらん | 変数宣言が無くても大丈夫?
fake hermes ties...2013/10/20 03:52 AM
replica de louis vuitton bags にょろぷにらん | 変数宣言が無くても大丈夫?
louis vuitton replica...2013/10/19 10:19 PM
best replica of louis vuitton bags にょろぷにらん | 変数宣言が無くても大丈夫?
replica louis vuitton bags in uk...2013/10/19 06:43 PM
louis vuitton replica artsy gm にょろぷにらん | 変数宣言が無くても大丈夫?
louis vuitton replica...2013/10/19 10:13 AM
fake hermes birkin hong kong にょろぷにらん | 変数宣言が無くても大丈夫?
replica hermes evelyne bag...2013/10/19 02:55 AM
hermes replica leather handbag にょろぷにらん | 変数宣言が無くても大丈夫?
hermes clutch bags replica...2013/10/19 01:28 AM
best hermes replica review にょろぷにらん | 変数宣言が無くても大丈夫?
fake hermes ebay...2013/10/18 12:53 PM
louis vuitton replica coin purse にょろぷにらん | 変数宣言が無くても大丈夫?
louis vuitton replica leather...2013/10/18 05:06 AM
louis vuitton replica damier azur にょろぷにらん | 変数宣言が無くても大丈夫?
Louis Vuitton handbags speedy...2013/10/18 03:23 AM

Comment Form

  

Trackbacks

Trackback url
Latest Entries
Categories
Recent Comments
Recent Trackback
Archives
Profile
Other
RECOMMEND