初めまして!
エイチームブライズでサイト開発を行っている@aoi_coro_です。
この記事はエイチームブライズ/エイチームコネクト/エイチーム引越し侍 Advent Calendar 2018 4日目の記事です。
概要
熟成された10年物の COBOL
使いな私が、転職を機に PHP
を触るようになったので、
COBOLとPHPのココがいいよね!を簡単に比較紹介してみようと思います。
最初に断っておきますが、個人の主観入りまくりなので、参考程度にしかなりません。
※PHPに関してはまだまだ初心者なので、間違っていたらツッコミお願いします!
技術?何それ美味しいの?的な気軽な読み物だと思ってください
COBOLとPHPとは
##言語について
詳しくはwikipediaで調べていただいた方がいいですが、簡単に説明します。
-
COBOL [wiki]
事務処理用に開発されたプログラミング言語で、
金融業や医療系でよく使用されています。(行政でもまだ現役・・・) -
PHP [wiki]
オープンソースの汎用プログラミング言語で、
サーバーサイドで動的なウェブページを作成するのによく使用されています。
##人気について
まずは、この二つの言語がQiitaにはどのくらい投稿されているのか調べてみました。
(2018-12-02時点)
-
COBOL
検索結果 211件
記事 43件
フォロワー 31人 -
PHP
検索結果 29,516件
記事 13,874件
フォロワー 30,256人
桁が・・・違いすぎる・・・!!
Qiitaにはコボラーがあまりいないのでしょうか、まぁ何となくCOBOL技術者は閉じた世界にいるイメージがあるので納得です。
COBOL技術者がコボラーと呼ばれるとき、モダンでないプログラミング言語を扱っていることを揶揄するニュアンスを伴っていることがある
・・・らしいですが、私はCOBOLへの愛を込めてコボラーと呼んでいます。
脱線しました。
もちろん、Qiita以外でもみてみましたが、COBOLよりPHPの方が圧倒的に人気なのは一目瞭然です。
2018年 人気&嫌われプログラミング言語トップ25- Stack Overflow
人気プログラミング言語、トップ10
#COBOLとPHPの記述比較
まずは手始めに世界一有名なプログラムから
「Hello World」はPHPがいい!
世界一有名なプログラム「Hello world」をCOBOLとPHPで書いてみます。
(//の後ろは本来の記述ではありません、この記事が読みやすいよう説明用の補足です)
- COBOL
000010 IDENTIFICATION DIVISION. //見出し部
000020 PROGRAM-ID. SAMPLE-01. //見出し部(プログラム名)
000030 PROCEDURE DIVISION. //手続き部
000040 DISPLAY "Hello world!". //Hello world!を表示
000050 STOP RUN. //処理終了
(COBOLだとシンタックスハイライトが効かない・・・なんて地味なんだ・・・)
- PHP
<?php echo "Hello world!"; ?> //Hello world!を表示
(PHPはカラフルでいいなぁ)
COBOLで書くと5行も必要ですが、PHPだと1行ですみます。PHP凄い!
##記述方法はPHPがいい!
- COBOL
COBOLはカラム固定形式で記述します。(カラムとは文字数のこと)
1~6カラム目
「一連番号」 各行を識別するために、6桁の番号を記述することができます。
7カラム目
「標識領域」 その行の標識を記述します。
8~11カラム目
「A領域」
12~72カラム目
「B領域」
A領域およびB領域に、コードを記述します。
- PHP
PHPにはカラム固定形式なんてものはないです。
素晴らしい!文字位置をいちいち考えなくて良いなんて!
記述をそれぞれ詳しく知りたい方はもっといい記事が沢山ありますので、調べてみてください。
この記事の目的はCOBOLとPHPの比較なので、今回は割愛します。
計算するならPHPがいい?
例として変数Aを+1してみましょう。
- COBOL
000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. SAMPLE-01.
000030 DATA DIVISION. //データ部
000040 WORKING-STORAGE SECTION. //データ部(変数等の定義)
000050 01 A PIC 9(1). //変数Aを1桁の数字タイプで定義
000060 PROCEDURE DIVISION.
000070 INITIALIZE A. //Aを初期化(数字は0埋め)
000080 COMPUTE A = A + 1. //A+1
000090 ADD 1 TO A. //A+1
000100 DISPLAY A. //Aを表示
000110 STOP RUN.
- PHP
<?php
$A = 0; //Aを初期化(変数Aに0を代入)
$A = $A + 1; //A+1
$A++; //A+1
echo $A; //Aを表示
echo ++$A; //Aに+1して表示
?>
$A++で+1できてしまうPHPはやはり凄いです!
が、COBOLのADDは文字だけで+1するという離れ業をしてのけています!
どちらも=はいらない子でした。ここは引き分けとします。
条件分岐ならPHPがいい?
条件分岐(IF文)はよく使いますよね。
- COBOL
000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. SAMPLE-01.
000030 DATA DIVISION.
000040 WORKING-STORAGE SECTION.
000050 01 A PIC 9(1).
000060 PROCEDURE DIVISION.
000070 INITIALIZE A. //Aを初期化(数字は0埋め)
000080 IF A = 0 //Aが0ならば
000090 DISPLAY 1 //1を表示
000100 ELSE //Aが0でないとき
000110 DISPLAY 2 //2を表示
000120 END-IF. //IF文ここまで
000130 STOP RUN.
- PHP
<?php
$A = 0; //変数Aに0を代入
if ($A == 0) { //Aが0ならば
echo 1; //1を表示
} else { //Aが0でないとき
echo 2; //2を表示
} //IF文ここまで
?>
おや?あまり差がありません。
これも引き分けか?と思うところですが、PHPには三項演算子なるものがあります。
<?php
$A = 0; //変数Aに0を代入
echo $A == 0 ? 1 : 2 ; //上のIF文と同じ結果を表示
?>
簡単な条件分岐ならこちらで十分!
PHPとはなんて便利な言語なのでしょう!
配列処理ならPHPがいい!
配列処理は慣れると便利なのですが、初心者にはちょっと複雑です。
例)配列に1~5の数字を順番に代入
1 | 2 | 3 | 4 | 5 |
---|
- COBOL
000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. SAMPLE-01.
000030 DATA DIVISION.
000040 WORKING-STORAGE SECTION.
000050 01 TABLE_A. //TABLE_Aを定義
000060 03 A PIC 9(1) OCCURS 5. //配列Aを定義
000060 01 X PIC 9(1). //繰り返し処理用の添字Xを定義
000070 PROCEDURE DIVISION.
000080 INITIALIZE TABLE_A. //TABLE_Aを初期化(数字は0埋め)
000090 PERFORM VARYING X FROM 1 BY 1 UNTIL X > 5 //Xを1〜5より大きくなるまで繰り返す
000100 MOVE X TO A(X) //AのX番目にXを代入
000110 DISPLAY A(X) //AのX番目を表示
000120 END-PERFORM. //繰り返し
000130 STOP RUN.
この処理の結果は下記のように表示されます。
1
2
3
4
5
- PHP
<?php
$TABLE_A = array(); //TABLE_Aを初期化
for($X = 0; $X < 5; $X++){ //Xを0〜5になるまで繰り返し
$TABLE_A[] = $X + 1; //TABLE_AにX+1を代入
}
print_r($TABLE_A); //TABLE_Aを表示
?>
この処理の結果は下記のように表示されます。
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
COBOLは1からはじまりますが、PHPは0から始まるので注意が必要です。
配列の中身を表示するのにCOBOLだといちいち繰り返し処理が必要ですが、
PHPはprint_rするだけでいい!
配列作成後の処理は圧倒的にPHPが楽です。
例えば、全ての値を10倍にするとします。
- COBOL
000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. SAMPLE-01.
000030 DATA DIVISION.
000040 WORKING-STORAGE SECTION.
000050 01 TABLE_A.
000060 03 A PIC 9(2) OCCURS 5. //数字タイプの2桁に変更
000060 01 X PIC 9(1).
000070 PROCEDURE DIVISION.
000080 INITIALIZE TABLE_A.
000090 PERFORM VARYING X FROM 1 BY 1 UNTIL X > 5
000100 MOVE X TO A(X)
000110 END-PERFORM.
000120 PERFORM VARYING X FROM 1 BY 1 UNTIL X > 5 //Xを1〜5より大きくなるまで繰り返す
000130 COMPUTE A(X) = A(X) * 10 //AのX番目にA(X)の値の10倍を代入
000140 DISPLAY A(X) //AのX番目を表示
000150 END-PERFORM. //繰り返し
000160 STOP RUN.
この処理の結果は下記のように表示されます。
10
20
30
40
50
- PHP
<?php
$TABLE_A = array();
for($X = 0; $X < 5; $X++){
$TABLE_A[] = $X + 1;
}
foreach($TABLE_A as $key=>$val){ //TABLE_Aの全てを処理する
$TABLE_A[$key] = $val * 10; //中身(val)を10倍してTEBLE_Aのkeyの中身として代入
} //繰り返し
print_r($TABLE_A); //TABLE_Aを表示
//2018-12-04
print_r(array_map(function($x){return $x*10;}, range(1,5))); //結果はTABLE_Aを表示と一緒
?>
- 2018-12-04 @rf_pさんと会社の同僚に教えて頂いた1行での記述方法を追加。1行って・・・。
この処理の結果は下記のように表示されます。
Array
(
[0] => 10
[1] => 20
[2] => 30
[3] => 40
[4] => 50
)
わざわざ回数を宣言しなくても配列全てを処理してくれるPHPは便利です!
他にも配列を処理するための関数がいっぱいありますし!
COBOLなんて変数Aの桁を変更し忘れて9(1)のままで実行すると桁落ちします・・・
結論
ここまで読んでくださってありがとうございます。
COBOLとPHPを比べてみて、PHP凄い!PHP書きやすい!PHP便利!となった私ですが、COBOLにも良いところがあります。
データの一括処理(バッチ処理と言います)には非常に重宝されていますし、何より処理を記述する上で覚えなくてはいけない単語が少ないです。
つまり、プログラムを書いたことがない新人でも2週間もあればある程度は書けると思っています。
PHPは関数をいかに多く覚えているかでコーディング速度にかなりの差が出ますし、関数を知らないと処理時間が余分にかかるようなコーディングをしてしまうこともあります。覚える単語が多くて眩暈がしました。
COBOL vs PHP は 引き分け!
個人的にはどっちも好き!で終わりたいと思います!
絶滅危惧種扱いされるコボラーですが、COBOLは時代に追いつきました。
なんとAWS LambdaにCOBOLが追加されたんですよ!何それ凄い!
COBOL<まだだ!まだ終わらんよ!!
プログラミング言語「COBOL」がTwitterトレンド入り AWS Lambdaのサポート言語に追加、技術者がざわつく
あまりの面白さに手を出そうかと思いましたが、ちょっと時間が足りませんでした。
そのうち遊んでみようと思います!
お知らせ
エイチームグループでは一緒に活躍してくれる優秀な人材を募集中です。
興味のある方はぜひともエイチームグループ採用ページ(Webエンジニア詳細ページ)よりお問い合わせ下さい。
明日
明日は、頼りになるデータアナリストの@k_0120さんがGoogle式リスティング広告について書いてくれます!
エンジニアもデータ分析をしないといけない時代、コードを書いて満足しているだけではいけないので、
分析⇒ブラッシュアップ⇒成果爆上げ!まで出来るようになりたいなぁと思う今日この頃です。