はてなキーワード: 三項演算子とは
自分には6年付き合った年上の彼女がいた。名前はPHP。学生の時からの付き合いで、自分にとっては初めての彼女だった。付き合った当初は全てが新鮮で、オブジェクト指向やSOLID原則、大事なことは全て彼女から教えてもらった。(そう思われるかもしれないが、)時間が経って彼女の魅力が感じられなくなってしまったということはなくて、彼女は歳をとっても魅力的なままだった。むしろreodonlyプロパティやEnum、null safe演算子など、新しい機能が導入されてますます綺麗になっていったように思う。最近ではジェネリクスさえ導入されたようだ。彼女は本当に努力家だ。
(褒められた話ではないが一応、彼女以外の女性を全く知らなかったわけではなく、TypeScriptという若い子と少し遊んでいたこともある。TypeScriptは昔からの知り合いのJavaScriptの妹で、大雑把な姉と違って几帳面で、少しオタク気質もある個性的な子だった。よく新しい型パズルを考案して楽しそうに話してくれたが、自分には正直よく分からなかった笑。)
そんな中でも基本的には6年間PHPとずっと一緒に過ごしてきた。前述の通り彼女に何か不満があったわけではない。ただ、彼女との将来に不安を覚えるようになってしまっていた。周囲に彼女と付き合っていることを話すと、「え、まだPHPと付き合ってたんだ?(昔は人気だったけど、最近はそうでもないよね)」みたいなことを、彼女のことをよく知らない人から言われたりもした。そこまで直接的ではなかったけれど。自分も、彼女以外の女性のことをほとんど知らずにずっと彼女と付き合っていて大丈夫なのかななんて思ってしまったりしていた。
結局自分はPHPと別れて、新しい女性と付き合う決断をした。新しい彼女の名前はGo。彼女は若いのに自分の芯がしっかりしていて、みんなの憧れの格好良い女性といった人だった。そんな彼女と付き合いだして、最初は戸惑うことも多かった。
例えばこんな感じだ。
また、今まで当たり前だと思っていたPHPの良さに気づくことも多い。PHPStanを使えば静的型付け言語と同じように型安全性を担保できていたし、彼女のWeb FWには歴史が長いだけあって痒いところまで手が届く様々な機能が完備されていた。経験豊富でこちらの要望をなんでも受け止めてくれるような包容力があったことに今更気づいた。
とはいえ、いつまでも昔の彼女を引きずっていてもしょうがない。Goにはこちらに積極的に合わせてくれるような包容力はないが、彼女なりの哲学を持っていてそれ故の美しさがあると思う。そして正直、まだ彼女の10分の1も理解できていない。彼女が得意だという並行処理や、実行速度が求められるような処理も、自分はまだ実際に実装したことはない。でもこれからしっかり向き合って、Goのことをもっと理解して、実りのある交際にしていきたいと考えている。PHPと別れてGoと付き合う決断したのは自分なのだから。
function hoge(callable $f = fn ($a) => $a) {} // エラー
function hoge(callable $f = 'intval') {} // エラー
function hoge(callable $f = null) {} // 合法
即時関数くらい書かせろよなぁ。せめて文字列でcallableな関数指定できるようにしてほしいわ
省略するには、$fがnullか確認してコールバック実行時にif文だか三項演算子だかで切り分けるしかない
なんで callable型 に null 入れられんだよ。キメェなぁ。なんでデフォルト値として関数代入できねーんだよ。使えねぇなぁ
いかにも増築増築で別々の機能を後付けて盛り付けてるって感じで、機能間の生合成がいまいちなんだよなぁPHP
まあ呼び出し元では hoge(fn ($a) => $a) みたいな呼び出しできるので、マシっちゃマシだけど
参考:
https://stackoverflow.com/questions/55587939/default-callable-in-function-definition-in-php-7
良い言語だと思うが、不満がある。
という愚痴がある。他人の書いたものを読む分には良い言語だと思うよ。
型ヒントはコンパイル時のエラーにならないじゃん。だったら、いらなくね?タプルは複数の値を返すときに使うのね。Go みたいだね。または Ruby の Struct みたいな。
あれ嫌いな人おるのか。俺も好きじゃないが。純粋に Haskell と同じ文法だったら良かったのにね。
アレはキモいね。素直に ?! で良いと思う。というか、Python は英語圏の人も納得はできないだろ、っていう文法が多くないか?
というのは同意する。ただ、書くときにそうは思わない。例えば、with 構文は Ruby の方がブロックを抜けたらクローズするという方針のが良いと思う。
時間 | 記事数 | 文字数 | 文字数平均 | 文字数中央値 |
---|---|---|---|---|
00 | 143 | 15513 | 108.5 | 39 |
01 | 116 | 12787 | 110.2 | 42 |
02 | 66 | 15409 | 233.5 | 33 |
03 | 27 | 3456 | 128.0 | 53 |
04 | 18 | 2483 | 137.9 | 76.5 |
05 | 61 | 7826 | 128.3 | 45 |
06 | 64 | 5316 | 83.1 | 48 |
07 | 57 | 3879 | 68.1 | 39 |
08 | 86 | 11967 | 139.2 | 65.5 |
09 | 150 | 12698 | 84.7 | 46.5 |
10 | 258 | 20435 | 79.2 | 50 |
11 | 203 | 18412 | 90.7 | 48 |
12 | 290 | 18500 | 63.8 | 40 |
13 | 239 | 22502 | 94.2 | 44 |
14 | 246 | 26177 | 106.4 | 45 |
15 | 188 | 15130 | 80.5 | 37 |
16 | 234 | 22047 | 94.2 | 44.5 |
17 | 163 | 12036 | 73.8 | 48 |
18 | 233 | 20296 | 87.1 | 46 |
19 | 222 | 16385 | 73.8 | 44.5 |
20 | 195 | 22566 | 115.7 | 36 |
21 | 234 | 21420 | 91.5 | 38.5 |
22 | 217 | 31387 | 144.6 | 37 |
23 | 175 | 17447 | 99.7 | 44 |
1日 | 3885 | 376074 | 96.8 | 43 |
ショタドール(10), 三項演算子(6), リョナラー(4), シロンボ(3), 隠れれ(3), sirabee(3), 卵胞(3), ネオテニー(5), 月経周期(4), 広告表現(9), ユーリオンアイス(3), 一人一派(45), ラブドール(28), 菅(12), 絵柄(25), 統一(31), ロリコン(40), 児童(30), 大多数(13), 女オタク(14), 迫害(10), 表現規制(13), 公共の場(16), オタ(22), 嗜好(15), 歌詞(23), 配慮(44), 規制(78), オタク(273), 表現の自由(25), 表明(29), フェミ(99), 価値観(40), 犯罪(59), 実在(19), 論理(24)
■男オタクはなんで他者への配慮が出来ないの? /20200831162341(38), ■ミスチル、ワンオクどころか浜崎あゆみですら歌詞に重みがあった /20200901103059(21), ■結婚するんだけど母親がホント嫌 /20200830195255(16), ■ /20200901132146(14), ■三味線って猫の皮使ってるの知ってる? /20200831220710(13), ■虫が原因で引っ越したいという妻 /20200901094609(12), ■Twitterは最早オタクのものじゃない /20200901115123(11), ■ /20200901105922(9), ■妻が昨晩家を出て行った。どうしたらいいのかわからない。助けて。 /20200901055242(9), ■同僚がヤバい女の人にタゲられてしまった。 /20200901083319(9), ■女の子とのほうが暮らしやすい /20200901124446(9), ■いつの間にかなくなった設定一覧 /20200901125234(8), ■anond:20200901105922 なぜフェミがオタクを叩くのか。 /20200901182958(8), ■「ここは三項演算子を使いましょう」「何でですか?意味同じですよね?」への返答求む /20200901212815(8), ■結婚する /20200901084646(8), ■結局、表現の自由問題って /20200901180012(8), ■Vtuber炎上しすぎ問題 /20200831115924(7), ■ゲーミング墓石買った /20200901041103(7), ■助けてくれ /20200901000706(7), ■ /20200901101632(6), (タイトル不明) /20200901100008(6), ■anond:20200901103059 /20200901103645(6), ■初音ミクは有名Pに食いつぶされてやがて死ぬ /20200901110216(6), ■anond:20200901110449 /20200901113409(6), ■中学生の時に30歳の人と付き合ってた /20200901131333(6), ■スーパー銭湯の男湯に娘を連れてくる父親が許せない /20200901172204(6), ■ちょっと待って、もしかして皆ロリショタを犯したいの? /20200901183641(6), ■LGBTとペド /20200901210546(6)
say = n => n % 3 == 0 ? "fizz" : n % 5 == 0 ? "buzz" : n;
https://anond.hatelabo.jp/20170911110731
昨年、はてブでバズりまくったエントリにまんまと乗せられた実務経験なしのプログラミング初心者が
N予備校プログラミングコースのプログラミング入門 Webアプリコース(有料のプログラミングコースで一番最初にやるコース)を修了したので知見をまとめておきます。
そんな感じです。以下、理由。
入門コースの実践編となる3章からは各講義の最後に課題が出されて、
N予備校のGitHubリポジトリにプルリクエストを出すことで課題の提出に変えて、
学習を進めていくのですが、
https://github.com/progedu/intro-curriculum-3001
https://github.com/progedu/intro-curriculum-4023
ちゃんと内容を理解できている人の割合はさらに低いと思われます。
なぜそんなに脱落していくかというと、まあ難易度だったり色々あるとは思うのですが
~をするにはこういうプログラムを書けばいい!ということは教えてくれるのですが、
なぜ、こういうプログラムを書けば~ができるのかということについての説明が少ないです。
感覚としては、途中の式と解答だけが書いてある数学の参考書を読み進めているような感じで、学習者には途中の式の意味を自力で読み解く能力が求められます。
その過程でドキュメントをあたったり、自ら調べて解決する能力が必要です。
またアロー関数式だったり、三項演算子や論理演算子を用いた代入などの省略記法を多用する割にソースコード中にほとんどコメントを書かないことも初学者には難しいかなと感じました。
体系的な学習にも不向きです。
あとオブジェクト指向の説明をせずに、JavaScriptのオブジェクトを扱っていたり、
データベースの学習をする前に、MVCパターンを扱っていたり、ちぐはぐさを感じるところも多かったです。
ということで(他にもいろいろあるのですが)、未経験者が独学で進めていくのは厳しいんじゃないかな~というのが入門コースを終えての結論です。
たとえば保護者の方が専門のエンジニアで分からないことがすぐに聞けるような環境にあればよい教材になるかもしれません。
ただ中級者へのステップアップを目指している初心者がきっかけをつかむには良い教材になりえるとも感じました。
私自身、GitHub、Linux(Ubuntu)、Node.js、Expressフレームワークなど、自主的にはなかなか食指が動かなかった分野の知識を得ることができたと思います。
難易度は高いですが、中級者向けのまとまった教材というのはネット上にもあまりないと思いますので、ある程度経験のあるプログラマが知識を深めるために利用するのはありだと思います。
ただ社会人が学習を進めるにはまとまった時間の確保というのがネックになるとは思います。
N予備校の入門コースの想定学習時間は180時間だったと思いますが、私はこのコースを修了するのに400時間前後かかったと思います。
(今年の1月初頭からほぼ毎日午後を勉強時間に充てて、ようやく昨日入門コースを修了しました)
コースを終わらせることだけを目標にするならもっと短くできるとは思いますが、ある程度知識をつけて今後にいかすことを目標にするとなると、想定学習時間内でコースを終わらせるのは難しい気がします。
色々書きましたが、それでも月1,000円というのは破格の価格設定だと思いますので、気になっている方は挑戦してみてもよいのではないでしょうか。
などがおすすめです。 「「分かりそう」で~」のサイトには本当にお世話になりました。m(_ _)m
ただ特にプログラミング経験の浅い方に伝えたいのですが、N予備校の入門コースが理解できなかった、挫折したからといって、プログラミングができないということはまったくないです。
私自身、SEやプログラマとしての実務経験はありませんが、趣味でも仕事でもガンガンプログラムを活用しています。
ぜひ挫けずにプログラミングの学習を続けていただきたいなと思っています。
あとネット上にはN予備校のプログラミングコースのレビューも散見されますが、無料コースしかやってないんじゃないかなーというものが多いのでお気をつけください。
基本的に無料コースと有料コースは別物と考えたほうがよいと思います。
参考になれば幸いです。
ところで、N予備校のニコニコ動画再現コースが2017年度中公開予定になってるんですけど、本当に公開されるんですよね・・・?(※)
580 :デフォルトの名無しさん[sage]:2006/07/26(水) 00:33:38
普通に三項演算子 ? : いれた方がよかったんだと思うけど、そうできない理由があったのか?
581 :デフォルトの名無しさん[sage]:2006/07/26(水) 00:37:57
>>580
ああすごい同意。
構文入れるんだよ。
583 :デフォルトの名無しさん[sage]:2006/07/26(水) 00:44:31
つか、一種の3項演算子じゃん。
[x for y in z] とかとも類似する構文だし、俺はあれでいいと思うけどなぁ。。。
584 :デフォルトの名無しさん[sage]:2006/07/26(水) 00:45:26
>581
とか? (本音を言うと誰にも使って欲しくない)
585 :デフォルトの名無しさん[sage]:2006/07/26(水) 00:46:03
? : が既に使われててダメだったなら
C then X else Y
みたいにできなかったのか疑問
条件が真ん中に来るとか見づらいよ……
586 :デフォルトの名無しさん[sage]:2006/07/26(水) 00:46:09
別にCに合わせる必要はないと思うよ。演算子関係ではCと違う部分がいっぱいあるから
半端に似せて「Cと同じだ」とか誤解を招くのはよろしくないと思う。
587 :デフォルトの名無しさん[sage]:2006/07/26(水) 00:48:42
"x for y in z"
← ←
データの流れが見える
"X if C else Y"
↑ ↑
分かれていて嫌
588 :デフォルトの名無しさん[sage]:2006/07/26(水) 00:57:28
>>587
でももう決まったことだし、個人的にはあまり気にしないで使うことになるだろうな。
591 :デフォルトの名無しさん[sage]:2006/07/26(水) 01:07:32
初めてリスト内包を見たときは「何じゃこりゃ、ワケわかめ」という印象だったけど
もう慣れてしまった。今ではリスト内包は直観的で分かりやすいと感じる。
ずっと Guido のセンスで取捨選択してきたわけだし、ぶっちゃけ今のところこれといって
今度の新しい三項演算子も慣れたら普通だと感じるようになるんジャマイカ。
592 :デフォルトの名無しさん[sage]:2006/07/26(水) 01:13:04
X if C else Y
「Xなんだよ! まあCだったらの話だけどな そうじゃなければYでよろしく」
593 :デフォルトの名無しさん[sage]:2006/07/26(水) 01:15:11
594 :デフォルトの名無しさん[sage]:2006/07/26(水) 01:16:06
[x for y in z]
↑
[x for x in original_list if x>2 and x<5]
595 :591[sage]:2006/07/26(水) 01:37:07
X if C else Y を使うのはきっと式の中がメインになるんだろうな。
functor = lambda x: x+1 if y > 0 else lambda x: x-1 if y < 0 else lambda x: x
とか、
delta = Numeric.array([[1 if i == j else 0 for i in range(M)] for j in range(N)], Numeric.Float32)
みたいな。>>593の言う通り、用例を考えていたらもう慣れてきた希ガスw
596 :591[sage]:2006/07/26(水) 01:54:02
q, r = divmod(n, 10)
print "%d%s" % (n, "th" if q == 1 else "st" if r == 1 else "nd" if r == 2 else "rd" if r == 3 else "
th")
たくさん if ... else が続く場合はなかなか読みやすい希ガス。
601 :デフォルトの名無しさん[sage]:2006/07/26(水) 11:08:59
>>596
その書き方が許されるとすると、かなり応用力がありそうですね。
596がすでにぱっと見ではよく分からない
602 :デフォルトの名無しさん[sage]:2006/07/26(水) 13:39:10
やっぱり、判定式が真ん中に来ると読みにくいな。
A = if C then B else D
603 :デフォルトの名無しさん[sage]:2006/07/26(水) 14:03:57
>>596
三項演算子いれて、
print "%d%s" % (i, r == 1 ? "st" : r == 2 ? "nd" : r == 3 ? "rd" : "th")
にしたほうが見やすくない?
607 :デフォルトの名無しさん[sage]:2006/07/26(水) 15:15:14
>>602
A = B if C else D だと
CならばDと目が流れちゃうかもかも。
まあ、慣れれってことか。
608 :デフォルトの名無しさん[sage]:2006/07/26(水) 15:28:49
まあ、ハズレのときはNoneが返る形ならば、
A = B or D で済むんだけどねぇ。
BがNoneならDって使い方。これは結構便利でよく使ってるんだけども。
いまだに
A = B and D は使ったことがないけども。
609 :デフォルトの名無しさん[sage]:2006/07/26(水) 15:49:33
>>596
> たくさん if ... else が続く場合はなかなか読みやすい希ガス。
おお!まさにそう思うよ!急にこの演算子が大好きになった。
1. 括弧の省略
PHPにおいてはif文やwhile文において、1行であれば括弧を省略することができます。
<?php if (...) hoge(); while(...) hoge();
これは、保守性・管理性を上げたいのであればやってはいけません。括弧がつくことで視認性が下がることなどありません。むしろインデントに騙されてしまい、ミスが増えます。例えば下の例です。
<?php $a=0; $b=0; while ($a < 10) $a++; $b++;
さて、このとき $a はいくつですか? $b はいくつですか?
答えは $a が 10、 $b は 1 です。$b は while のスコープにはないので、ループしません。
括弧でくくられていればこのようなミスを防げます。括弧はきちんと書きましょう。
2. 三項演算子
ネストしすぎると可読性が損なわれるため注意が必要ですが、うまく使うとスマートに書けます。うまく活用しましょう。
3. switch文
条件分岐が多い時にうまく使いましょう。
ただし if 文で素直に書いた方が速度は速いという噂もあります。
実用上の違いはほとんどありませんので、チームの方針に従いましょう。
4. ループ文
PHP にはループ制御構文が用意されています。主に下記の3つを用途にあわせてうまく使い分けましょう。他にもループに関する構文や関数はありますが、基本的には下記で事足りるでしょう。
主に回数でループさせたい場合は for 文を利用するといいでしょう。
<?php for ($i=0; $i<10; $i++) { //