ラベル JavaScript の投稿を表示しています。 すべての投稿を表示
ラベル JavaScript の投稿を表示しています。 すべての投稿を表示

2018-07-16

日本語の変数名や関数名はレビューの評判が悪いけど... (JavaScript)

拙訳書『JavaScript 第3版』で、付録に日本語の識別子(変数、定数、関数の名前)を使ってみたのだけれど、Amazonに悪いレビューがけっこうある。

しかも全面的に日本語にしたわけではなくて、自分が書き下ろした付録でそうしてみただけなのに、そんなことはまったく書かずに鬼の首でも取ったみたいに攻撃をする方が何人かいらっしゃる。

変数名や関数名に自信をもって英語を使える人、手をあげてくださ〜い

かれこれ○十年英語を学習し、TOEICのスコアは895点(ぐらい)だった私ですが、私は手をあげられません。

英語ができる人が読めば、理解はしてもらえそうな名前を付けることはできます。 しかし、自信があるかと言われれば、「ない」。

「ある」と答えられる人は、ネイティブ並みの(あるいはそれに近い)英語力を持っている人か、自分の英語の実力を知らないかのどちらかでしょう。私は簡潔に正しく表現できているか、いつも自信がありません。

就職したての頃、上司のソースに「xxxCount」という変数がいくつか並んでいて、「こういうときcountって言うのかな〜。numberOfxxxとかのほうがいいんじゃないかな〜」とけっこう悩みました(最近はネイティブスピーカーのソースを簡単に見られるので、まあ、頻繁に出てくる表現は身につけようと思えばさほど難しくは何のかもしれませんが)。

チームに日本語ができない人がいる場合、これは仕方ない。下手な英語でも日本語よりは理解してもらえる。

しかし、たとえば自分が練習するのに、日本語の識別子を使っても回りの人に不都合もありません。

「変数が日本語だと、読みにくい」という方がいらっしゃいますが、多分「慣れ」です。慣れれば日本語のほうがパッと見て意味がわかります。試してみてください。3日もすれば慣れてしまう人がけっこういると思います。

 
  • 説明するときは、日本語のほうがはるかに理解度が高い —— 英語ができない人は世の中にけっこう多いのです。プログラミング講座を運営していて身にしみているのですが、つまずく方の3割から5割ぐらいは、英語が原因です。docmentとかMath.randamとか綴って、「動かない」ということがけっこうあります。そういった方が、変数名を自分で英語で考えるというのは、かなり難しいでしょう(逆に言えば、英語ができればプログラミングには有利だということでもありますが)
  • 自信を持って変数名や関数名を書けるし、日本語で考えたほうがはるかに楽
  • 長いプログラムになればなるほど変数名は長くなる。そうすると自分の英語が正しいのかますます自信がなくなる

英語で書きたい方が書くのは一向にかまいません。ただし、やってもみないで「読みにくい」と断言するのは止めていただきたいのです。

ご自分で何日間か試して、回りに方にも何日間か試してもらって、それでも「全員一致して読みにくい」という結論になったら、具体的に「合計○人が△日間試してみたが、読みにくいということで一致した」とご批判をどうぞ。

ただし、一人でも「日本語のほうがわかりやすい」という方がいらしたら、それでも頭ごなしに「読みにくい」と断言できますか?

2018-01-24

JavaScriptのアロー関数( =>)は初心者にとってはバグの元かも

JavaScript講座をやっているのだけれど、受講生の方に例題を解いてもらうと、「何でこれで動かないのだろう?」と考え込んでしまうケースが時々ある。だいたいは長くても5分ぐらい試行錯誤すると「ああ、これが原因か!」とわかるのだけれど、講師の実力が疑われる場面だけに、かなりあせる(笑)。

ところが先日、「なぜこれがエラーにならないのだろう?」というケースがあった。ひとまず動き出すのだが、なぜか途中で止まってしまう。でもコンソールにはエラーメッセージが表示されない。

止まっている(止めている)箇所を探ってみたら、問題のコードは次のものだということがわかった。

if (picnum => 5) {
  clearInterval(timerID)
}

タイトル読んだ人は分かったと思うけど「=>」は「以下」の意味には使えないので、「>=」が正しい。 でも「=>」か「>=」なんてあまり意識しないよな〜。

「何で構文エラーにならないんだろう?」と少し考え、自分のパソコンでも似たようなコードを動かしてみたが、自分のパソコンではエラーになるようだ。あまり時間を割くわけにも行かず、結局その日はわからずじまい(今考えると自分のパソコンでは「=<」を試していたんじゃないかな。こちらはエラーになる)。

今日受講生の方からソースを送っていただいて眺めていたら、「なんだアロー関数ジャン」。

ifの条件でいつも5を返す関数を定義していたのだ。「->」はポインタっぽいから「=>」にしたのかもしれないけど、ちょっと紛らわしいかな〜。間違える初心者、結構いそうだな〜。

自分が無意識にやっていることを意識させされる

このケースもそうだけど、初心者の人といろいろやっていると、自分が無意識にやっていることを意識させられることが多い。 「以上」は「>=」とほとんど無意識に打ってる。だから「=>」と書かれていても最初は気が付かなかった。

ちなみに私が「>=」と打つケースはまずないのも気が付かなかった原因のひとつかもしれない。「a >= b」とは書かずに「b <= a」と書く。数直線は左から右に大きくなるからね。こう決めておけば、迷わずに済む。これは誰に教わったのか忘れけれど、まだ学生だったような気がするから、○十年前の話。本で読んだんだっけかな。

英語の語順が反映されている

考えてみれば英語では、"greater than or equal to" とか "less than or equal to" だから、順番どおり打つと「>=」とか「<=」になる(「>」は "greater than" で「<」は "less than")。だから、「=>」とか「=<」にはならない。

こんな所にも、英語が影響しているのだ。英語がよくできたほうが、プログラミングの習得には有利なのだ。

日本語では「以上」とか「以下」というのが普通だから、本当は「≧」とか「≦」とか書きたいところだけれどね。