プログラムのコーディングをしていて常に考えてしまうのは「効率性」と「汎用性」ですが、1度作り終わったプログラムなのに、「もっと効率的にできた・・・」と何度も作り直してしまい、時間を費やしてしまう下駄です。
でも、これってプログラマーの人達の間では当たり前の事らしく、仕事でプログラム作業が遅延してしまうのもこれが原因であることもかなり大きいと言えるでしょう。
そんなプログラム言語には、どの言語にも便利な「関数機能」が備わっていますが、汎用性の高いモノを作ろうとした時に、受け渡し値の個数を決められないケースなど、arrayやobjectにして受け渡したり、グローバル変数に格納して受け渡したりしていましたが、どうやらargumentsという機能が大体どの言語でも備わっている事をしり、少し調査してみました。
Javascriptのarguments
function arg_length(){
console.log(arguments.length);
}
arg_length("a","b","c","d","e");
> response
0:a
1:b
2:c
3:d
4:e
関数に任意の変数で受け渡しを行うのが通常ですが、その変数があるのか無いのか必ず判定する存在確認コードもなかなかめんどくさいと思っていたんですが、
argumentsを使うと、送られてきた個数の入った配列から取り出すだけなので、これまでのコーディングルールを少し変更してもいいかもしれませんね。
ただし、function内で、arguments配列のどの位置がどういう変数なのかはキチンと設計しておかなければいけないので、そうした判定をする関数を作っても良さそうです。
PHPのfunc_num_args()
<?php
function arg_length(){
for($i=0; $i<func_num_args(); $i++){
echo $i .":". func_get_args()[$i] .PHP_EOL;
}
}
arg_length("a","b","c","d","e");
> response
0:a
1:b
2:c
3:d
4:e
PHPでは、argumentsの個数を得るのが"func_num_args()"で値を得るのが"func_get_args()"関数です。
"func_get_args()"は、それ自体が配列なので、リファレンスサイトでは変数に入れて配列に使っていますが、関数そのままから使うと上記のような不格好になりますが、「コレはコレ」と割り切って使っていきましょう。
Pythonのargs
#coding: UTF-8
def arg_length(*args):
for i in args:
print(str(i))
arg_length("a","b","c","d","e")
> response
a
b
c
d
e
pythonの関数はデフォルトでargument仕様になっているので、あまり構えなくても良さそうですね。
改めて柔軟な言語であることが分かります。
Rubyのargs
def arg_length(*args)
# print args
for i in args do
print(i,"\n")
end
end
arg_length("a","b","c","d","e")
> response
a
b
c
d
e
rubyはpythonと似た感じに書けるのですが、若干の違いがあるので、この2言語を同時に使っているとよく混同します。
そして、pythonと同じく、関数の引数はデフォルトでargments仕様になっていますね。
あとがき
いろんな言語で同じ処理を書くと、その言語の特徴がより理解できて非常に楽しいですが、やはり時間を忘れてしまいます。
プログラム言語って、学習教材のように考えられますが、プログラマーにとっては「おもちゃ」のような存在なんでしょうね。
「こーしたら、あーすることもできる」とか、「こうならないかな?」とか考えているだけでも、結構ワクワクするし、そのとおりになった時に感じられる達成感が結構多くていい体験ができる環境ですね。
初心者であるほどこうした体験は多く、感じる感覚は強いと思います。
学習することは尽きないので、ブログを書くのも楽しい感じですね。
0 件のコメント:
コメントを投稿