アカウント名:
パスワード:
難点といえばソースが丸見えなことがビジネス的に問題なくらいで、Javaが目指したクロスプラットフォームは満たしているし、開発者にとって日本語みたいなUNIXシェルや、一番慣れ親しまれている開発言語であるCとの共通点も多いので、Javaほどプログラマに求める新たな開発スキルは必要ない。
現実に組織内で完結する環境では、業務ツール開発言語として最も頻繁に使われてるように思える。
自分の組織内でPerlをほとんど使わなくなった主な理由は、次の4つ。
- true, false の boolean値を利用できない。 CやJavaを利用している人にとって、これが使えないのはかなり痛い(自分だけ?)。
Perlの場合、bool値を使う場合は、常にuse constant を使うか、 sub true() { return 1; } sub false() { return 0; } などの記述をする必要がある。非常に面倒。
- オブジェクトを呼び出す際に new 演算子が必ずしも必要でないため、開発者の嗜好や、開発環境の慣習によってコードがバラバラ
CもJavaもやるけど、true/false無くても別に痛くない。人によってマチマチになる点はコーディング規約で縛ればいい。命名規約でも縛ればいい。
自由すぎて困るなら、自分で枠を作ってやればいい。# それがフレームワークの別の側面だと思う
booleanがなくても構わないというのは、すごいですね。そもそもbooleanって、0と1だとコードの可読性が低くなるから導入されたものですよね。
$is_valid = true;$is_valid = false;
$is_valid = 1;$is_valid = 0;
上記のコードでは、あきらかに前者の方が理解しやすいです。後者は1という数値が真を表しているのか分かりませんし、0と1だけではなく、ひょっとすると 2,3,4...という数値があるかもしれないという疑念にかられてしまいます。(実際に2以上の値がついたコードで嵌ったことがあります。)
> 人によってマチマチになる点はコーディング規約で縛ればいい。
コーディング規約を決めるコストが高つくので、あまり使わなくなったという経緯があります。真偽値の扱いをどうするかとか、アクセサのモジュールはどれを使うのとか、そういったことを開発前に打ち合わせること自体、時間の無駄だと思います。
確かに欲しい時ありますね。
とはいえ、Cでも、C99まで言語仕様にtrue/falseは無かったのですが、コード規約や共通で使用するマクロで定義されていたから、それほど問題は無かったです。これがakiho氏の考え方ではないでしょうか。
coffe_ataさん、代弁ありがとうございます。
pumipumiponさんは言語仕様にbooleanを入れるべきと言っているように見えたもので。『コード規約や共通で使用するマクロで定義』があれば済む話だと思うんですよね。それがいわゆる業界標準的なものになれば、尚良しでしょうか。
例えば「真は必ず"true"とし、共通ライブラリXに用意した真偽判定関数のisTrue()を使うこと」とか。
となると「0か1ではないコードを書く未熟者が現れる」は「規約を守れないアホの出現」の話になるわけで。そこまでアホな奴の対処は業務上では不要というか、排除か再教育かでしょう。# 以上、1点目の解消案。
# 2点目はコーディング規約で、4点目は命名規約で解消可能。# 3点目は笑いどころと受け取りました;-D
君は信じるかい?それとも笑うかい?
http://www.onicos.com/staff/iz/amuse/wapi/wapi.html [onicos.com]
> BOOL foo(); と宣言された Windows API foo() について、>> if(foo() == TRUE)>> は誤りです。やってはならないスタイルです。 なぜかって?理由は、返り値が BOOL と定義された Windows API 関数の中には、 0, 1 以外の値を返す関数が存在するからです(きったねー!)。 よって、以下のように記述しなければならなりません。
信じるも何も、事実ですよ。# 私の古い知識だと「でした」が正しいか。## 現在どうなっているかは知らない。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」
Perlはもっと評価されていい (スコア:0)
難点といえばソースが丸見えなことがビジネス的に問題なくらいで、Javaが目指したクロスプラットフォームは満たしているし、開発者にとって日本語みたいなUNIXシェルや、一番慣れ親しまれている開発言語であるCとの共通点も多いので、Javaほどプログラマに求める新たな開発スキルは必要ない。
現実に組織内で完結する環境では、業務ツール開発言語として最も頻繁に使われてるように思える。
Re: (スコア:3, 興味深い)
自分の組織内でPerlをほとんど使わなくなった主な理由は、次の4つ。
- true, false の boolean値を利用できない。
CやJavaを利用している人にとって、これが使えないのはかなり痛い(自分だけ?)。
Perlの場合、bool値を使う場合は、常にuse constant を使うか、
sub true() { return 1; }
sub false() { return 0; }
などの記述をする必要がある。非常に面倒。
- オブジェクトを呼び出す際に new 演算子が必ずしも必要でないため、開発者の嗜好や、開発環境の慣習によってコードがバラバラ
Re: (スコア:2, すばらしい洞察)
CもJavaもやるけど、true/false無くても別に痛くない。
人によってマチマチになる点はコーディング規約で縛ればいい。
命名規約でも縛ればいい。
自由すぎて困るなら、自分で枠を作ってやればいい。
# それがフレームワークの別の側面だと思う
Re: (スコア:2, すばらしい洞察)
booleanがなくても構わないというのは、すごいですね。
そもそもbooleanって、0と1だとコードの可読性が低くなるから導入されたものですよね。
$is_valid = true;
$is_valid = false;
$is_valid = 1;
$is_valid = 0;
上記のコードでは、あきらかに前者の方が理解しやすいです。後者は1という数値が真を表しているのか分かりませんし、0と1だけではなく、ひょっとすると 2,3,4...という数値があるかもしれないという疑念にかられてしまいます。(実際に2以上の値がついたコードで嵌ったことがあります。)
> 人によってマチマチになる点はコーディング規約で縛ればいい。
コーディング規約を決めるコストが高つくので、あまり使わなくなったという経緯があります。
真偽値の扱いをどうするかとか、アクセサのモジュールはどれを使うのとか、そういったことを開発前に打ち合わせること自体、時間の無駄だと思います。
Re: (スコア:1)
確かに欲しい時ありますね。
とはいえ、Cでも、C99まで言語仕様にtrue/falseは無かったのですが、
コード規約や共通で使用するマクロで定義されていたから、
それほど問題は無かったです。
これがakiho氏の考え方ではないでしょうか。
Re: (スコア:1)
coffe_ataさん、代弁ありがとうございます。
pumipumiponさんは言語仕様にbooleanを入れるべきと言っているように見えたもので。
『コード規約や共通で使用するマクロで定義』があれば済む話だと思うんですよね。
それがいわゆる業界標準的なものになれば、尚良しでしょうか。
例えば「真は必ず"true"とし、共通ライブラリXに用意した真偽判定関数のisTrue()を使うこと」とか。
となると「0か1ではないコードを書く未熟者が現れる」は
「規約を守れないアホの出現」の話になるわけで。
そこまでアホな奴の対処は業務上では不要というか、排除か再教育かでしょう。
# 以上、1点目の解消案。
# 2点目はコーディング規約で、4点目は命名規約で解消可能。
# 3点目は笑いどころと受け取りました;-D
Re: (スコア:2, 参考になる)
君は信じるかい?それとも笑うかい?
http://www.onicos.com/staff/iz/amuse/wapi/wapi.html [onicos.com]
> BOOL foo(); と宣言された Windows API foo() について、
>
> if(foo() == TRUE)
>
> は誤りです。やってはならないスタイルです。 なぜかって?理由は、返り値が BOOL と定義された Windows API 関数の中には、 0, 1 以外の値を返す関数が存在するからです(きったねー!)。 よって、以下のように記述しなければならなりません。
Re: (スコア:1)
信じるも何も、事実ですよ。
# 私の古い知識だと「でした」が正しいか。
## 現在どうなっているかは知らない。
Cの話だけど (スコア:0)
昔は基本として仕込まれてたんです。
# 8 bitCPU 以下の環境とかでは、ヤバイの多かった。
if (hoge == true)
なんてコードの書き方の人をよくみかけるので、
今時は誰も教えてないのかって思ってます。
本当はこう書くんです!
if (!!hoge)
…とやったら、不評だった。
Re: (スコア:0)