チェックボックスの項目名をクリックしてもチェックがon/offできるようにする

■方法
<label>タグを使用する

使用例は以下。

<label>
<form method="GET" action="">
<input type="checkbox" name="search_status" value=1 checked="checked" />
<input type="checkbox" name="search_status" value=2 />
<input type="checkbox" name="search_status" value=3 />
<input type="submit" name="検索" />
</form>
</label>

まだまだ知らないことは山のごとしですね。

あるstatusが数字で定義してあって、その数字に対応する単語でそれぞれのstatusを置き換えたいとき

htmlなどで、statusをコトバで表示させたいときに便利なやり方を先輩がしていたので、メモ。

■ポイント
グローバル変数で置き換えるコトバを配列にしておくこと
※要素番号がstatusと等しくなるように

こんな対応のstatusが定義されているとします。

status=0は「申請中」
status=1は「承認OK」
status=2は「承認NG」

コトバで置き換える処理は以下。

my @status = ('申請中','OK','NG'); #グローバル変数で置き換える単語を配列で作る
{
	my $res = DBからデータを取ってきます。(statusも数字で返ってくる。)

	#$resはこんな構造とします。
	#$res = {
	#	sites => [
	#		{id =>1, status => 1, site_name => 'hoho'},
	#		{id =>2, status => 0, site_name => 'gege'},
	#		{id =>3, status => 2, site_name => 'bibi'},
	#		{id =>4, status => 2, site_name => 'wawa'},
	#		{id =>5, status => 1, site_name => 'jojo'},
	#	]
	#}

	foreach (@{$res->{sites}}){
		$_->{status} = $status[$_->{status}];
	}
	$res;
}

こうすると、戻り値の$resはこんな形になってます。

$res = {
	sites => [
		{id =>1, status => '承認OK', site_name => 'hoho'},
		{id =>2, status => '申請中', site_name => 'gege'},
		{id =>3, status => '承認NG', site_name => 'bibi'},
		{id =>4, status => '承認NG', site_name => 'wawa'},
		{id =>5, status => '承認OK', site_name => 'jojo'},
	]
}

私は、思いつきもしませんでした〜。

「コードを読む」ということと「人のコードをコピーする」ということ

モジュールやフレームワークを利用するときなどに、「コードを読む」っていうことをしますよね。私はコードを読んでも理解の度合いが先輩とかなり差があると感じ、この理由を突き止めるべく、先輩に読み方を聞いてみました。「コードを読む」ということに2つのパターンがあって、慣れないうちは意識して使い分けないといけないそうです。

■コードを読むということ
(1)モジュールやフレームワークが一体何をしているコードなのか読むときの読む
目的:「何をしているところか」という処理内容を理解すること
読み方例),
・セッションファイルに値を入れて更新している
・tokenを時間とIDを基に発行している

(2)モジュールやフレームワークを使ってコードを書く時の読む
目的:「渡さなければならない引数はなにか、戻ってくるものはなにか(値やコンテキストなど)」を知ること
読み方例),
・セッションIDとタイムスタンプを渡すと、is_success=1が返ってくる
・タイムスタンプとログインIDを渡すと、tokenが{token=>'xxxxxxxxxxxx'}(ハッシュのリファレンス)で返ってくる

勉強のためにモジュールのコードなどを読む時も、(1)の読み方だそうです。(1)と(2)の違いは、(1)で概要を把握し(2)で厳密に理解するということだそうです。もう少し具体的に言うと、(1)でどのメソッドや関数で何ができるかを把握して、(2)で実際の使い方を知る、ということだそう。


この読み分けは、初めてのモジュールやフレームワークを使うときにも意識してやると効果的とのこと。
初めてのフレームワークやモジュールを使ってコードを書くときのポイント - WEB開発初心者の成長記録


私は、読むという行為が常に(2)になっていました。そりゃ、理解度も低ければ理解するのも遅いわね、と納得した次第であります。
そして、

■人のコードをコピーしてきて使うということ
=そのコードを書いた人の考え方をコピーしてくる、ということ

だそう。
先輩って、知識の宝庫ですね。聞きすぎるといけないし、聞かなすぎるとこれまたいけないし、この加減が難しいです。

初めてのフレームワークやモジュールを使ってコードを書くときのポイント

どーも、初めてのフレームワークを使ってコードを書くのが他の人と比較しても無駄なくらい遅いので、その遅さの原因を探るべく先輩に聞いてみた。
ポイントは以下だそう。

◎メソッドなどの関数の機能を調べるとき
・メソッド名や関数名から機能を推測する
・引数(渡す変数や定数など)から機能を推測する
◎使用するフレームワークやモジュールを使っている他のコードを参考にするとき
・変数を見つけたら、そのコード内(そのスコープ内)で他に使われているところを探し、何が行われているか推測する

私は、上から読んでいって、分からないところがあるとその度にコードレベルで何をしているか調べに行っていました。そりゃ、時間かかりますよね。。。
時間がかけれるときは、勉強になるのでコードを読むのもいいと思いますが、スピード重視の開発力も磨いていかないと。


ちなみに、変数名や関数名などの名前は、適当な物を付けてはいけないってことや最初に英文字が来ないといけないってことは知っていたんだけど、名前を推測に使う、っていうことにまで思考がいっていませんでした。先輩方には大爆笑されました。それと、1年もやってきていまさら、、、とあきれられもしました。

vim/正規表現を使う

(1)正規表現を使用したい範囲をビジュアルモード(vやV、ctrl+v)で選択
(2)「:」を打つ
(3)正規表現を書く「s/置換前文字列/置換後文字列/」
※オプションに「g」を付けると選択範囲全てに適用される
※「g」意外にもオプションはある
(4)Enterを打つ

検索する時のキーワードとしては、「vim 正規表現」などがいいそうです。
vim正規表現は、若干perlと異なるそう。セドという言語の正規表現に近いそうです。

vimコマンド/合わせ技と便利なコマンド〜文字の入れ替え、文字列の削除、折り返しのon・off、括弧の対応〜

前提:ノーマルモード(escを押すとノーマルモードになります)
◎文字を入れ替えるとき
xp
・x→カーソル部分の文字を消す
・p→カーソル部分の後ろにインサート
例), abcという文字列があって、bacとしたいとき
abcのaにカーソルを合わせて「x」
↓
カーソルは動かさず「p」

◎カーソル位置からある指定した文字まで消したいとき
df1文字
※前方検索「f」の代わりに後方検索「F」や「t」、「T」などでもできるよ。
・d→後ろに続く条件を消す
・f→前方検索
例), abxxxxxxzcという文字列があって、acとしたいとき
bにカーソルを持ってきて「d」
↓
カーソルは動かさず「f」
↓
同様にカーソルは動かさず「z」(消したい範囲の終点を指定)
前提:一度ノーマルモードになってから行う(escを押すとノーマルモードになるよ)
◎折り返しをなしにする
:set nowrap
◎括弧を使用してちゃんと組み合わせで書くことができたら、一瞬対応する括弧にカーソルを飛ばす
:set showmatch

先輩に、君はまだまだvim操作が脊髄反射になっていない、と言われました。
確かに、例えばカーソル移動の時などは、どうやったら最短で行けるか一度頭で考えてから手を動かしています。脊髄反射できるようになると、頭で考えなくても手が勝手に動くらしい。