InfoQ

News

物議をかもしたAdobe Flexのコーディング規約文書

作者 Moxie Zhang , 翻訳者 金森 諭 投稿日 2008年5月22日 午前6時24分

コミュニティ
Java
トピック
RIA
タグ
Flex

2008年4月18日、AdobeはFlex SDKのコーディング規約とベストプラクティスを公開した(source)。AdobeのFlexチームの説明によると、この新しい規約は「・・・オープンソースでActionScript3(AS3)で書かれたFlexフレームワークのコンポーネントを書く上でのコーディング標準を定めています。この規約に従うことでソースコードは一貫性と秩序を保ち、プロの仕事らしく見えるようになります。」

その説明にもかかわらず、この公開によりFlex RIAコミュニティの開発者の間で論争が引き起こされた。たとえば、Keith Petters氏(source)はコード規約文書の「Flex執着」と呼んでいる部分が気に入らないという。「私をイライラさせるのは、この規約がFlexドキュメントと名づけられていることです。Flex仕様というようなものは実際ありません。これは完全にAS3のコーディング規約なのです。AdobeにはFlexへの固執を捨てて独立した言語としてのAS3の存在を認めてもらいたいものです。」と彼はコメントしている。これに対しIgor Costa氏(source)は「AdobeのFlexへの固執とAS3を一つの言語として使うこと、それは確かに正しい、Keith。しかしこのドキュメントはFlex 4 SDKのコーディングガイドについてでありSDKに含まれるActionScriptクラスについてだけだ。言語全体に対してではない。」とブログに書いている。

一番活発に行われている議論はおそらく、コードはどのような書式であるべきかということを詳しく論じていることだろう。TL on PLのTom Lee氏(source)は「何か根拠のようなものがあった方が彼らにとってよかったからで、こうしなさい、という命令ではないのだと思います。」と述べている。たとえば、「new Array()ではなくArrayリテラルを使いましょう」のような規約上での例外があることを指摘している。そしてLee氏はこう述べている。

new Array()”はオブジェクトの初期化において他の方法よりも一貫性があるのではないでしょうか?"[]"([1,2,3]のようにAS3で配列の宣言に使われる)は略した記法です。私の見たかぎり略記は通常使わないようにされています。言語により慣れ親しむ必要があるからです。同じように私はこの提議に対して、ObjectのリテラルやRegExp(正規表現を扱うクラス)のリテラルなどを使うことにも異議を唱えたいと思います。一貫性が大切なのです。

Igor Costa氏もコーディング規約とベストプラクティスに不必要な指定が含まれていることに疑問を持っている。たとえば、「左括弧の前後や右括弧の前にはスペースを入れない、とあります。a[ 0 ]ではなくa[0]とするようにということです。空白スペースについて本当に心配する必要があるのでしょうか?」と疑問を投げかけている。

一方、Tony Fendall氏(source)も一貫性と良い慣習の数の少なさにはメリットがあると考えている。彼はこう述べている。

個人的に、推奨されている規約には賛同します。確かにコードの役割的には空白は直接重要でないとも言えるでしょう。しかし全てのクラスや関数で一貫性が保たれていることは、各人がそれぞれのスタイルでコードを書いているより効果があります。限りなく少ない慣習だけでタスクをこなすメリットは一貫性を保つだけの価値があるのです。

整数と符号なし整数の使用についての議論もある。今回のコーディング規約文書では整数値に対しては、たとえマイナスにならなくてもint型を使うように推奨している。そしてuint型はRGB値やビットマスクやその他の非数値に対してだけ使うようにとある。「符号なしの整数値以外のものに対してだけuint を使うことに意味はあるのだろうか?」とKeith Petters氏は疑問視している。

Pixel Burner氏はこう意見している。「多くのプログラマが律儀にuintを使っていることに気がつきました。しかし私はいくつかの記事で、uintは int型に比べて200から400パーセント遅くなる可能性があると読みました。なので私はuintは使わないのです。」Burner氏が触れている gskinner.com(source)の最近の記事では特にuintの使用について書かれている。この記事ではコードをテストしてから次のように書いている。

uint を使う使うちゃんとした理由がないかぎりuintは使わないようにしましょう。intを使った方がいいのであればintを使って構いませんが、int型と Number型のパフォーマンス優劣は気にするほどではありません。理由がなければNumberをデフォルトで使いましょう。一番大切なのは、思い込まないことです。可能であればテストとベンチマークをしてみましょう。その結果は驚くものになる可能性があります。

このような議論があるが、AdobeのSho Kuwamoto氏(source)は結局ActionScriptでは次の場合以外はintを使わないことを強く推奨している。

    1. メモリを節約したい時(大量の数値を格納する時には違いが出てくる)
    2. 整数値がほしい時(例:var i: int = j / 2)
    3. 整数値をクライアントサイドからサーバサイドに送る際にバグが起きにくいようにするため(例:バリューオブジェクトのint型変数)

全ての議論から確かに分かるのは、コーディング規約には書式や保全性だけでなく一切合財が含まれるということだ。

原文はこちらです:http://www.infoq.com/news/2008/05/flex-coding-convention

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
slashdot+
Hatena

特集コンテンツ一覧

Flex 4の新機能トップ10

今週(2009年6月1日)AdobeはFlex 4の正式な初ベータ版をリリースしました。Flex 4はGumbo(オクラ)というコードネームで開発されています。今回のリリースには大きな変更が多数含まれています。このRIAフレームワークの最新バージョンにおいて変更された事柄についての概要を以下のリストで見ていきましょう。

Domain Driven Design(ドメイン駆動設計) Quickly 日本語版

ビジネス領域の深い理解を反映したドメインモデルを設計するための、ヴィジョンとアプローチです。この本は、Eric Evans氏の「Domain Driven Design」の主要点を短く読みやすく要約しました。

JavaプログラマがFlexとBlazeDSを学んだ方がいい13の理由

この記事ではJavaプログラマがなぜFlexとBlazeDSを学ぶべきなのかについて13の理由を述べています。なぜ高度にインタラクティブなWeb サイトからJavaで開発されたバックエンドをもつエンタープライズ・アプリケーションまでを含む、リッチ・インターネット・アプリケーション(RIA)の開発にFlexとBlazeDSの組み合わせが最適な選択肢となるのかについて述べています。

仮想パネル: バックログは重要な成果物とプラクティスか、それとも無駄か?

Mary Poppendieck氏、Ron Jeffries氏、Jeff Patton氏、David West氏、Steve Freeman氏、Jason Yip氏が、バックログに関する彼らの意見とアジャイルチームを成功させるために必要な事を語った。

Perf4Jを使ったパフォーマンス解析とモニタリング

この記事ではAlex Devine氏が、Java開発者がPerf4Jをどのように利用できるかと、タイミングステートメントにコードを追加し、ロギング、結果の解析とモニタリングを行うオープンソースツールセットの説明をします。

複雑な外部DSLを開発する

本稿では、Vaughn Vernon氏が内部DSLと外部DSLの違いを説明し、複雑な外部DSLを開発する際のステップを示します。

J2EEアプリケーションにおけるAOPを使ったフェッチ戦略の実装

この記事では低レベルのサービス・レイヤやリポジトリ・レイヤを肥大化させることなく、フェッチング・ストラテジによってモジュール化された方法でバックエンドにあるシステムからデータを取得する処理を最適化する方法について説明します。

実証済みのアイデアの融合: S#arp Architectureの裏側

この記事では、Web開発における多数の成熟傾向と、クライアントに価値を提供することに対するそれらのメリット、およびS#arp Architecture(最善の手法と技術を活用しようとするASP.NET MVCをベースとしたフレームワーク)内でのそれらの使用について取り上げます。