前の日 / 次の日 / 最新

swk's log

2005-08-10 Wed

* 2 変数のスワップ [tech]

Perl での 2 変数のスワップ.

my $a = 3;
my $b = 2;
($a, $b) = ($b, $a);

と書くべきところを間違えて

$a, $b = $b, $a;

と書いてしまうと,$a も $b も変化しなくて悩むという話.

これを見て,一瞬ちょっと違った悩み方をした.

「ん? コンマ演算子はオペランドを左から順に評価して最後の値を返すから, = の左側の『$a, $b』は $b になって,右側の 『$b, $a』は $a になって,その結果 ($a, $b) == (3, 3) になるんじゃないの?」

もちろんそんなことはなくて,コンマ演算子より代入演算子の方が優先度が高いので,「$a」「$b = $b」「$a」が順に評価されて,結局変化無し,が正しい.

コンマと代入の優先順序なんて,普段から for 文とかで使いまくっててよく分かってるはずなのに,どうして勘違いしたんだろう,と考えてみたけど,たぶん「($a, $b) = ($b, $a);」の構造が先入観として作用して,頭が勝手に代入の前後それぞれをグルーピングしちゃったんだろうな,と理解した.

逆にいうと,C でうっかり

int a = 3;
int b = 2;
(a, b) = (b, a);

なコードを書くと,(3, 3) になっちゃうわけですな.(← どんなうっかりだ)


ついでに思い出した有名なやつ.(いや正確には,自力では思い出せなくてぐぐったのでメモしとく)

a = a ^ b;
b = a ^ b;
a = a ^ b;

これ最初に考えた人ってすごいよなあ.

* セキュア CD [tech]

東芝 EMI は学習能力がないという理解でよろしいですか? (Y/y)

* LED ベルトバックル [misc] 1 user

画像

すげー!! 要らねー!!

[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [Williamtut] Nice blog ) http://anmdcf7i.com my blog (2015-03-27 10:23:34)

* [Michaelkisy] Onlinesites gratis nye veninder århus - ... (2015-03-07 12:08:49)

* [Charliekt] gor man en quiz Hur skriver man tecken f... (2015-03-05 06:53:03)

* [Charliekt] lyckad Sms pick up tongeren gratis dan... (2015-03-04 20:39:33)

* [Charliekt] motala speed oldenburg, a vegetarianer -... (2015-03-04 14:21:20)

* ...

* サーバーとクライアントの違い,マイクロソフトの主張 [tech]

[サーバー] クライアントからのコマンドに応答するコンピュータまたはプログラム。サーバーは、やさしくて思慮分別を備えたコンピュータ一家のおじいちゃんのようなものです。すべての知恵は、おじいちゃんから子、子から孫へと流れています。
[クライアント] 別のコンピュータ (サーバー) によって提供されるファイル、ソフトウェアなどの共有アイテムにアクセスするコンピュータです。サーバーがおじいちゃんなら、クライアントは孫と言えます。

うはーこれはひどい.

英語版の翻訳のせいかとも思ったが,どうも日本人が書いたようなんだよな….

少なくとも,server と client の英語の意味を知らない人が書いてることだけは確実と思われる.

<< 2005-08 >>
SuMoTuWeThFrSa
123456
78910111213
14151617181920
21222324252627
28293031

2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12
2002 : 01 02 03 04 05 06 07 08 09 10 11 12
2001 : 01 02 03 04 05 06 07 08 09 10 11 12
2000 : 01 02 03 04 05 06 07 08 09 10 11 12
1999 : 01 02 03 04 05 06 07 08 09 10 11 12
1998 : 01 02 03 04 05 06 07 08 09 10 11 12
1997 : 01 02 03 04 05 06 07 08 09 10 11 12
1996 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2012-02-13 02:02


Shingo W. Kagami - swk(at)kagami.org