InfoQ

InfoQ

News

マイブックマーク

ブックマークするためにログイン または 会員登録 する

ブックマークされました!

ブックマークがエラーになりました。もう一度お願いします。

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

作者 Moxie Zhang , 翻訳者 金森 諭 投稿日 2008年5月22日

セクション
デベロップメント
トピック
RIA ,
Java
タグ
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

特集コンテンツ一覧

GAE開発の落とし穴

Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します

イベントレポート:「Coqチュートリアル#1」

去る1月12日、定理証明支援系ツールCoqの初心者向けチュートリアルが開催さ れた(http://kokucheese.com/event/index/23667/)。今後も2月2日 (http://kokucheese.com/event/index/23744/)、2月9日、2月16日と引き続き開 催されていく予定である。本記事では、開催の様子をレポートする。

Javaの未来についてのNeal Gafter氏とのディスカッション

Choosing Options

Neal Gafter氏はOracleによるJava買収の影響に関する議論、Javaにセグメンテッドスタックやメタオブジェクトプロトコルを追加することについての主張、そしてJavaとC#との比較について話をしてくれた。

Google Dartのエッセンス:アプリケーションの構築、スナップショット、Isolate

GoogleはVMをともなう新しい言語であり、JSコンパイラでもあるDartをプレビューした。 InfoQはDartのアプリの構築に貢献する文法の裏側を探った:スナップショット、Isolate、モジュール方式

CSPベースのモデル検査ツール「Process Analysis Toolkit」

本記事ではCSPベースの「マルチドメイン・モデル検査ツール」である、PAT(Process Analysis Toolkit)について紹介する。モデル検査は、形式手法(Formal Method)という方法論を基礎とする技術であり、複雑さが増大しながらも安全性を求められる、現在のソフトウェア開発の状況に対する処方箋の1つとして注目されている手法である。

Jenkinsによる継続的インテグレーションのススメ(4) ~CloudBeesでJenkinsをサービスとして使う~

前回まで、Jenkinsの幾つかの側面に注目して解説をしてきました。シリーズ最後の今回は、Jenkinsをサービスとして使う方法を紹介します。

書籍『抽象によるソフトウェア設計-Alloyではじめる形式手法-』の紹介

Alloyは、MITにて開発された仕様記述言語であり、ツールによる自動解析を使い、インクリメンタルに形式仕様が書けることが特長である。筆者らはAlloy開発者による、Alloyを使った形式手法入門書を翻訳、今夏にオーム社より刊行した。本記事では、Alloyの簡単な概要と、翻訳書『抽象によるソフトウェア設計』(「Alloy本」)を紹介する。

Windows デバイスで開発するタッチユーザーインターフェイス

スマートフォンを中心としたマルチデバイスにおけるタッチユーザーインターフェイスへの対応は、既に必須の項目となりつつある。本記事では、Windows デバイスにおける UX のベースとなっている「メトロ」というデザイン言語を掘り下げながら、既存環境を意識しつつもどのようにタッチユーザーインターフェイス開発に取り組んでいくべきであるかについて解説していく。