仕様
さてさて、今回の話はみなさんも聞いたことがあるだろう『仕様』です。よくオンラインゲームなんかで○○ができないのは仕様ですと言う言葉をよく耳にします。まぁ、企業とかは都合が悪いことが発生すると全て仕様と言う言葉に逃げるのですがね。今回は、そういうクライアント向けの仕様の話ではなく、プログラマがコーディング(プログラムを書くことです)する上での仕様の話。ぶっちゃけ、独学でプログラムを習ってきたプログラマや、初めてその企業に入ってコーディングすることとなったプログラマがまず悩むのが仕様コーディングなるものです。プログラムって結構色々な書き方があるんですよ、分かりやすい例を以下の簡単なプログラム例に示します。ちなみにプログラムはJavaで書きます。まず、一つ目/* Swap.java * * 変数の値を変更するプログラム */class Swap{ // フィールド int x; int y; // コンストラクタ Swap(int hx,int hy) { // フィールドの初期化 x = hy; y = hx } // 値を入れ替えるメソッド public void SwapMethod { // 値を一時格納する変数 int swap; // 変換処理 swap = x; x = y; y = swap; // 出力 System.out.println("x = " + x); System.out.println("y = " + y); }}class SwapMain{ // メインメソッド public static void main(String args[]) { // オブジェクト生成 Swap ob = new Swap(10,20); // obに対するSwapMethod()メソッドへアクセス ob.SwapMethod(); }}はい、C++やらJavaを触ったことがある人なら簡単なプログラムだと言うことが分かりますね。かなりプログラムが汚いですが、それは例を示すだけなんで勘弁してください。ちなみに、上記のように書くのが俺のコーディングスタイルです。さて、上記のプログラムを別な書き方で書いてみます、処理の流れは全て同じにしておきます/* Swap.java * * 変数の値を変更するプログラム */class Swap{ // フィールド int x,y; // コンストラクタ Swap(int hx,int hy){ // フィールドの初期化 x = hy; y = hx; } // 値を入れ替えるメソッド public void SwapMethod{ // 値を一時格納する変数 int swap; // 変換処理 swap = x; x = y; y = swap; // 出力 System.out.println("x = " + x + "\ny = " + y); }}class SwapMain{ // メインメソッド public static void main(String args[]){ // オブジェクト生成 Swap ob = new Swap(10,20); // obに対するSwapMethod()メソッドへアクセス ob.SwapMethod(); }}さぁ何処が違いますかね?まず"{"の書き方ですね、一つ目のプログラムではプログラムの下に書くのに対して、二つ目のプログラムはプログラムの後に書いています。この様に色々と違いがあるんで、プログラムの書き方って人によって千差万別なんですよね。さて、長年独自でプログラムの勉強をしていますと、やはり自分流のコーディングスタイルなるものが生まれちゃうんです。しかし、それを打ち消してくれるのが企業のコーディング仕様と言うものなんです。ぇぇ~、これが非常にやっかいなんです。これは企業で統一されることもありますし、SEによって指定してくる時があります。んで、困るのが、プログラムを理解しているSEは無茶な仕様にしないんですが…プログラムを理解していないSEの下に着くと無茶苦茶な仕様に悩まされますいつも思うんですが、何故プログラムもできない奴がSEなんてやるんでしょうね?(永遠の疑問だと思いますさて、次に俺の今のバイト場の越後屋が出してきやがった無茶苦茶な仕様通りにプログラムを書いてみたいと思います。/* SwapFile20051224.java * * 変数の値を変更するプログラム */class SwapFile20051224{ // フィールド int SwapFile20051224x,SwapFile20051224y; // コンストラクタ SwapFile20051224(int SwapFile20051224hx,int SwapFile20051224hy){ // フィールドの初期化 SwapFile20051224x = SwapFile20051224hy; SwapFile20051224y = SwapFile20051224hx; } // 値を入れ替えるメソッド public void SwapFile20051224Method{ // 値を一時格納する変数 int SwapFile20051224swap; // 変換処理 SwapFile20051224swap = SwapFile20051224x; SwapFile20051224x = SwapFile20051224y; SwapFile20051224y = SwapFile20051224swap; // 出力 System.out.println("x = " + SwapFile20051224x + "\ny = " + SwapFile20051224y); }}class SwapFile20051224Main{ // メインメソッド public static void main(String args[]){ // オブジェクト生成 SwapFile20051224 SwapFile20051224ob = new SwapFile20051224(10,20); // obに対するSwapMethod()メソッドへアクセス ob.SwapFile20051224Method(); }}ぇぇ、冗談抜きでこんな仕様です。まず仕様にはこんなことが書いてあります。・ファイル名は処理タイトルに"File"文字を付け、その後に年月日をつけること・変数はファイル名と同じ名前をつけ、その後に独自の変数名をつけることこれだけじゃないんですけどね、他のプログラマと複合作業ができるように細かい変数名やクラス名の仕様はあるんですが…いくらなんでもこの仕様はありえなくない?まず俺が仕様を見た第一声がこれでした。ちなみに、今の無茶苦茶なプログラムは先ほど提示したプログラムと全く同じ処理結果を返します。誰が見ても…この仕様じゃ、めさくさ醜い+複雑なプログラムに見える+意味がないと思います。しかしプログラムが出来ないSEはこれが当たり前みたいな顔をしてくれやがります。大問題ですよね(笑そんな訳でいるかどうか分かりませんが、このサイトを見ていて尚且つ、SEになろうとしている人。頼むからこんな仕様はやめてください間違ってもプログラマ泣かせなSEにはならないでくださいね(笑