- 1 名前:デフォルトの名無しさん [2018/04/26(木) 21:48:23.07 ID:mMDBzDaB.net]
- www.typescriptlang.org/
JavaScript that scales. TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. Any browser. Any host. Any OS. Open Source. part1 https://peace.5ch.net/test/read.cgi/tech/1349187527/ part2 https://mevius.5ch.net/test/read.cgi/tech/1430386649/
- 516 名前:デフォルトの名無しさん mailto:sage [2020/09/30(水) 13:09:08.11 ID:pBMNn9J9.net]
- >> Microsoftが2018年に75億ドル(約8000億円)を投じて買収したGitHub
知らんかった オンライン版のvscodeがGitHubにあるのはそういうわけか
- 517 名前:デフォルトの名無しさん [2020/10/02(金) 00:47:34.12 ID:c4z818i5.net]
- ピチャイのマイクロソフトは良いマイクロソフト。
- 518 名前:デフォルトの名無しさん [2020/10/10(土) 13:18:23.70 ID:hWE3VueY.net]
- こんにちは。プログラミング初心者です。
TypeScriptとJavaScriptはどっちが最強なんでしょうか? これから始める場合はどっちがいいのですか? TypeScriptはJavaScriptとくらべ実行速度は変わらないのに 静的型付けのため記述が面倒で学習する価値がないと友達が 言ってたんですがこれは正しいですか?
- 519 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 14:42:01.38 ID:xtGRZD/P.net]
- >>503
普段からめちゃくちゃな 読めないコード書いてる人には 難しいと思いますよ。
- 520 名前:デフォルトの名無しさん [2020/10/10(土) 15:45:53.37 ID:hWE3VueY.net]
- >>504
なるほど。つまりTypeScripはtコードをきれいに見せるためだけの言語ってことなんですね。
- 521 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 15:53:32.39 ID:PAS52Dcu.net]
- 価値がわかるようになるまではJS使うのをおすすめする
今TS触っても嫌いになるだけだと思う
- 522 名前:デフォルトの名無しさん [2020/10/10(土) 16:35:21.67 ID:hWE3VueY.net]
- ん。。。価値が分かる人にしかわからないプロ向けの言語なんですね。。。
- 523 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 16:57:30.55 ID:OrgjdyW8.net]
- 綺麗に見えるということは他人が書いたコードであっても理解しやすいといえる
- 524 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 17:08:45.97 ID:hWE3VueY.net]
- 複数人で開発するとき用ってことですね。
一人でWEBアプリ作って満足してる分には必要なさそうですね。
- 525 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 17:26:29.17 ID:BjY8+1pb.net]
- ソースを公開する時に型は必須だな
複数人開発だと必然的に他人にソースを公開する訳だから型は必須だな 一人で開発してる時も未来の自分にソースを公開すると考えれば型は必須だな
- 526 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 17:30:06.10 ID:BjY8+1pb.net]
- この理屈で行くと型が必要無い状況は使い捨てのコードを書く時になる
実際、実験的なコードを書くときはJavaScriptでサクッと書いてる
- 527 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 17:31:37.81 ID:hWE3VueY.net]
- 型を指定するのは実行速度のためだと思ってましたが違うんですね。
- 528 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 17:41:03.06 ID:myt/k5c7.net]
- 個人で、1ファイル、2, 300行程度のオモチャしか書かない奴にはいらないかもしれんな
複数人で、2ファイル以上のまともなコード書くなら、型は必須 「全てのfunctionが何かを引数にとって何かを返します。その『何か』はコードを読まないとわかりません」 じゃ困るだろ
- 529 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 17:46:03.97 ID:hWE3VueY.net]
- 複数人でも一つ一つ関数定義を確りして
コメントを残せば後から見返してもわかりそうな気がするのは 私がまだ未熟なんですね。
- 530 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 17:46:21.26 ID:j
]
- [ここ壊れてます]
- 531 名前:qYiciHv.net mailto: 3ヶ月前の自分は他人
webのようにリリース後にメンテする可能性があるなら確実に過去の自分を恨むだろう [] - [ここ壊れてます]
- 532 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 17:56:33.59 ID:myt/k5c7.net]
- >>514
でもそのコメント、人によって書き方バラバラだし、その通りに実装・使用されているかわからないよね そのコメントが規格化されていて、その通りに実装・使用されていることを保証してくれるのがTypeScriptとでも思え
- 533 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 18:02:00.15 ID:hWE3VueY.net]
- わかりました。TypeScriptの勉強をしてみます。
バックにはMicrosoftとGoogleがついてるみたいですので 安心して学習してみます。
- 534 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 18:14:27.06 ID:myt/k5c7.net]
- せや
どこの馬の骨ともしれんバカではなく MicrosoftとGoogleの天才たちを信じろ
- 535 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 18:32:27.26 ID:ekvQuOcm.net]
- 型情報による補完などのエディタの支援機能がないと書けない体になってしまった…
- 536 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 18:36:49.23 ID:jkmsbl3z.net]
- >>504
これさ無茶苦茶なコード書いてる人がキレイなコードかけるようになるって点でTSって素晴らしいと思う
- 537 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 18:39:08.90 ID:hWE3VueY.net]
- 今日までエラーがでなければどんなコードでもいいと思ってました。
- 538 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 18:52:40.99 ID:jqYiciHv.net]
- 最終的にはそうだよ
同じ動きをするならユーザーにはどんなコードも同じ 開発側から見てどうか?ってだけ
- 539 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 19:08:51.73 ID:hWE3VueY.net]
- 開発側の立場で考えるとTypeScriptが必要になるんですね。
- 540 名前:デフォルトの名無しさん [2020/10/10(土) 19:15:05.89 ID:SwfxuCYC.net]
- >>503
なんか…Javascriptやってる人達ってこれくらいのレベルなんだよな… 今から始めるあなたはともかくとして、そのアドバイスしてくれたお友達のレベルもたかがしれてそう。
- 541 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 19:19:58.24 ID:PAS52Dcu.net]
- Pythonなんかもっとひどいぞ
ただ色んなレベルの人がいるというのは新しい人が入ってきている証拠でもあるので、歓迎すべきことでもある 誰でも最初は初心者なんだしさ
- 542 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 19:42:13.27 ID:w1paHL08.net]
- 技術ブログ等で公開されているTypeScriptなコードの品質の平均はJavaScriptのそれと比べて高い。そういう意味でも使う価値がある。
もちろん例外はあるけどね
- 543 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 21:06:49.30 ID:tFVag5PE.net]
- >>523
開発環境でリファクタリング機能の 性能に注目出来るぐらいになりましょう!
- 544 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 21:08:17.35 ID:tFVag5PE.net]
- javascriptの言語仕様では
まともな物は作れませんので。
- 545 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 22:14:14.78 ID:fDny8+f1.net]
- >>526
それはTypeScriptの採用によって品質が向上したというより、タイプ量やビルドの複雑さの多少の増大と引き換えに静的型付けを取るという 極めて正しい選択ができるだけの能力があるエンジニアが書いたからだろうね
- 546 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 22:15:54.62 ID:6sdqDrQt.net]
- 俺はC/C++からやってるけど、JavaScriptで型がなくって困るって事はないなあ。
ただ、形無し言語しかやったことないのなら、TypeScriptの方を薦めるけど。 (なお俺は生JSしかやっておらず、TSは触ってもいない) Cみたいにメモリ領域を厳密に規定する為ならともかく、 Java以降の言語の型って、コンパイラで落とす為でしかない。 しかも、入口と出口で都合2回書いて、それが合っているかを確認するだけ。 実際、それでもタイポを落とせるので大変役に立つのは事実だけど、 型を間違ってエラーになるなんて事はほぼ無いし、有ってもスモークテストで確実に落とせる。 だから、言ってしまえば、スモークテストが通るまで捗るだけ。 この
- 547 名前:_、現状のC++やRustは空回りしてて、
コンパイラで落とす為に厳密に書く必要があり、結果的にやたら遠回りしてたりする。 俺が思うにあれは完全に本末転倒。コード構造が制限を受けてどうするんだよ? この点、TSは無駄に気負わず、 型の恩恵を受けつつ、面倒になれば省略出来る、位だから受けているのだと思う。 ただ、型の恩恵なんて上記の通り、スモークテストが通るまででしかない。 その後のメンテナンス性は、特にオブジェクト指向(OOP)を正しく適用出来てるかがキモになる。 ところが、JSではOOPは学べない。これはTSも同じだと思う。 周りの環境が酷すぎて、初心者〜中級者にはOOPするメリットを感じられないから。 (HTMLも酷いが、ネイティブオブジェクトを拡張してもろくに動かないのも酷い) Javaや.NETみたいにびしっと作ってあれば、比較的小さな規模でも恩恵を受けられるが、 JSはそれらよりは断然高レベルプログラミングで、その分行数も少なく済み、 大体においてそんなに大規模にもならないし、OOPガッツリやる意味もほぼ無く全て済んでしまう。 だからその先、具体的にはソースコードが10k行を越えるまでは、 JSやTSは学習用言語としてはいいと思うよ。 その辺になってきて、一つの言語しか使えないってのもほぼ無いから、杞憂かもしれんが。 [] - [ここ壊れてます]
- 548 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 22:22:26.76 ID:A0BwGHo+.net]
- 何言ってんだこいつ
- 549 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 22:29:28.83 ID:xMQUNHWy.net]
- OOPなんて使えて当たり前。OOPを神格化してる奴でOOP以外の技法も使いこなせてるヤツ見たことない。
それにOOPの価値はコードの大小に依らない
- 550 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 22:35:39.32 ID:myt/k5c7.net]
- 俺は困らないからJSでいい論は全てゴミ
想像力の欠けた引きこもりアスペが書いた妄想 これはガチ
- 551 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 22:36:40.03 ID:6sdqDrQt.net]
- TSスレだから、TSマンセー、型マンセーな奴の echo chamber になってるだけだぞって事。
TSは悪い言語でもないが、お前がら思ってるほどJSも酷くない。 だから数あるAltJS、勿論TypeScriptもそれに含まれるが、それでもJSを殺しきれない。 型で恩恵受けるのは、スモークテストまでだろ。 そもそも変数名みれば型なんて自明だし、そうじゃないのが問題。 そして関数を小さく、というのがほぼ最強で、そもそも規模が小さければ変数の型が分からないなんて事はない。 型に囚われてる奴は、型の先、つまり、型が有ろうがなかろうがどうにもならない世界が見えてないのだと思うよ。 この意味でRustもリソースリークを気にしすぎ。そもそもリークなんてしないし、面倒なら最初からGC使えばいいだけ。 TSはこの辺変に気取ってないからいい。
- 552 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 22:43:14.81 ID:A0BwGHo+.net]
- まあ自分のコードだけで完結する世界で閉じこもってる分にはそれでいいんじゃない
- 553 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 22:43:43.59 ID:myt/k5c7.net]
- >>534
> そもそも変数名みれば型なんて自明 ハンガリアン信者の方ですか? こんなこという奴の久々に見たわ > そもそも規模が小さければ変数の型が分からないなんて事はない ほんと自分の都合のいい側面しか見えてないよな 俺は困らないからJSでいい論は全てゴミ 想像力の欠けた引きこもりアスペが書いた妄想 この通りやンけ!
- 554 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 22:48:34.65 ID:6sdqDrQt.net]
- >>532
OOPを神格化している奴がゴミなのは認める。Javaの連中が特にそう。 そして俺はそうじゃない。 ただな、DOMとかその辺が酷くて、OOPの恩恵を小さいコードでは得られないのはOOPを学ぶ上では痛いと思う。 Javaみたいにたった50行のコードにOOP強いて余計に意味不明になるのも問題だが、 自作コードのみでOOPの恩恵が受けられるのは3k行程度以上
- 555 名前:必要で、
そこまでOOPを囓れないでいるのもまた問題。 正直、ここにいるお前らの半分以上はOOPを正しく理解出来てないと思うよ。 ただ、それでも書けるところが良いところなんだが。 OOPは大規模コードの整理術であって、そもそも大規模化しないのならそれが大正義だ。 [] - [ここ壊れてます]
- 556 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 22:57:06.91 ID:6sdqDrQt.net]
- >>536
それはそもそも読み方を間違ってんだよ。 関数なんて大体20行程度だし、問題になるにしてもI/Fだけ。 ただそれ以前に、俺はサイトのmimnify済みのJSでも割と読めてしまうことに気づいてしまった。 「訳の分からないことをやってないこと」が重要で、そうじゃなければ追えるんだよ。 だから、初心者のコードほど読めない。これは事実。
- 557 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 23:00:39.67 ID:myt/k5c7.net]
- >>538
世界中のプログラマーが関数なんて大体20行程度で訳の分からないことをやってないコードを書いてくれる理想郷にお住まいなのであれば、TSはいらないだろうね
- 558 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 23:10:25.88 ID:6sdqDrQt.net]
- >>539
逆だろ。そういう理想郷を作るようにお互い努力するんだろ。 そしてTSはJSよりはそれを目指していると思うが。 関数が20行ってのはGoogleかnpmのコーディングルールに有ったはず。 コードレビューする時に「パワポ1画面に入らないような関数を書くな」だった。 実際、そこまで短くすれば、訳の分からない複雑なことは出来なくなるから、確かに効くんだよ。
- 559 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 23:25:22.20 ID:BjcbKuib.net]
- TS は、もっと後でよい
Ruby 3.0 で型推論が入ることになったけど、作者のMatz が、 型を入れると難しすぎて、初心者が簡単にプログラミングできなくなると言ってた 型はプロ向き。 型があると、初心者のfirst choice にならない
- 560 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 23:26:05.68 ID:OZkIKLkD.net]
- いや型がある方が楽やろ、ガイド付きやで?
- 561 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 23:26:47.91 ID:OZkIKLkD.net]
- コンパイルエラーで検知できずに動かしてみるまでわかんないとか…
- 562 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 23:37:08.35 ID:6sdqDrQt.net]
- ついでに言っておくと、多分TSの「型」ってのはC++やRustの連中の「型」の範疇には入らない。
多分、連中からすると「型道」から外れてる、邪道だ、と見えると思う。 それは認識しておいた方がいい。 ただ、俺はむしろその方がいいと思っている。 C++のテンプレートなんて、 「これって型がなくてダックタイプでよければさらっと書いて終わりでしたよね?」ってのが多すぎる。 MSはそこら辺、極めて現実的でいい。 あと、既に言われているが、JSerなんてこの程度、というのは当たっている。 具体的に言えば、実力を過大評価している勘違い馬鹿が多い。 ただ、それは界隈のオンボロさと、楽勝さによっているのであって、環境を共有しているTSでも同じだよ。 とはいえ俺はこれも良いことだと思っている。 つまり技術レベルが低くても達成出来ることが(見た目)大きいわけだから。 だからCとかの連中は、なんでJSerがあんなに馬鹿でも世界が回るのか、 それはつまり、界隈のシステムが上手く出来てるからなんだけど、その辺学ぶべきだと思うよ。
- 563 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 23:43:46.38 ID:6sdqDrQt.net]
- >>541
難しくはならないが、煩雑にはなるんだよ。 そしてその煩雑さを利益が上回る為には、最低限ある程度の規模が必要で、 それは最初の最初の初心者が書くコードの規模(精々100行)では全然足りない。 だからってスクリプト言語で調子に乗ってガシガシ書いた後に型が欲しくなる時は確かにある。 その辺、従来は対応出来なかったが、TSはそこを上手く掬い取れた。
- 564 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 23:50:21.71 ID:TSALDtkC.net]
- JavaScriptで昔書いた3000行のコードをTypeScriptに直しているんだけど
いやまあ型は便
- 565 名前:と思えるいろんな発見があったわ;; []
- [ここ壊れてます]
- 566 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 23:50:29.75 ID:hWE3VueY.net]
- 現在もっとも人気と将来性があって最強と言われる
Pythonに型がないのはどういう理由なんでしょうか?
- 567 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 23:56:23.03 ID:hWE3VueY.net]
- パイソンはクラスは使えるようですね
- 568 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 00:05:58.83 ID:rXA2CZZq.net]
- >>547
Pythonが受けているのは、馬鹿でも書けるから。これに尽きる。 Cだと、PCの物理的構造をある程度知ってないと理解しにくい面があるから。 ただ、Pythonが将来性があるかは疑問だと思う。 使われ続けるという意味では確実だが、プログラマを目指すのにいいか?と言われると微妙。 俺はPythonやってないが、最近かじろうとして、止めた。 String.replace(regexp)がなくて、RegExp(str)しかなく、ああこりゃ駄目だ、と思った。 なるほどPythonではクソコードしか書けない、というのは納得だ。 しかも3.0になってずいぶん経つのに、え?まだこんな所で揉めてるの?みたいな制限事項多すぎ。 ただまあ、明らかに君はそれ以前なのだから、グダグダ言わずにさっさと始めるべきだよ。 君のレベルなら、TSでもJSでもPythonでもどれでもいいと思うよ。 Pythonのクソさが分かるようになるまでに2年ほどはかかるだろうし。
- 569 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 00:11:31.57 ID:rXA2CZZq.net]
- >>548
クラスが使える=オブジェクト指向が出来る、という意味では、 最近のプログラミング言語でそもそもOOP出来ないものは存在しない。 それほどまでにOOPは認められた存在だと言うこと。 ラムダも同様だが。(なおPythonのラムダには制限あり) だから最近の言語はどれもこれも同じだ!と言われていて、実際そうなのだが、 敢えて違う言語を!とやったのがGo。 ただしGoは別方向にかなり糞なので初心者は止めた方がいい。(と思う) ただ、実際はGoも結構初心者受けしている。特に形無しスクリプト言語上がりには。
- 570 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 00:24:04.47 ID:n4TOsjKe.net]
- Pythonは 機械学習関連のライブラリが充実していて 最強の地位は10年後も20年後もおそらく変わらないだろう とプログラミングに詳しい知り合いが言ってました。 マシンスペックも上がってきているので Python のようなスクリプト言語でも 十分に実行速度が発揮でき益々 需要が伸びる可能性が高いと聞きましたが。
- 571 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 00:25:02.84 ID:vIhtxp0O.net]
- >>547
mypyというものがあってだな
- 572 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 00:34:52.32 ID:y3zg5lZo.net]
- スレチ
- 573 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 00:49:43.03 ID:rXA2CZZq.net]
- >>551
ならその知り合いに聞けよ。ただそいつはヘボだと思うが。 Pythonが強いのはライブラリが揃っているからだが、今のところ実行速度が致命的に遅い。 それはCPUやGPUの性能向上程度では何ともならない。 機械学習なら結局のところは何回回せるかが勝負で、C比80-800倍遅いのだから話にならない。 だからCythonなんて物も出てくる。 ただしアルゴリズムを頻繁に書き換えるとなると違う。 ちゃっちゃと書き換え、夜流して朝結果を回収、夕方までにプログラムを変更してまた夜流す、 という繰り返しなら、「新しいプログラムがいつ出来るか」が勝負となり、当然スクリプト言語の方が有利だ。 ただ、これが出来る学生なんてなかなかいないと思うし、そこまで行くのなら多分Cも普通に使える。 そもそも機械学習ならそんなにアルゴリズムも変えないはずだし。 だから今でもガチの計算機工学科ではCもやってるだろ。 Cだと1時間で結果が出るのにPythonだと3日かかります、では研究の進捗も全然違ってしまう。 だから用途に合わせて使い分けることが必要で、 はっきり言ってCも大して難しくもないからそういう奴等はCを最初から学ぶようになってる。 PythonやRuby界隈が高速化を目指さないのは俺には完全に疑問だ。 何だかんだで今後とも速度は重要であり、正義だ。 Rubyなんて死にかかってるが、JSと同程度の速度が得られれば、復活するとも思っている。 ただ、Matzもその周りもそれをしようとしないんだな。クソ言語なんてもう要らないのに。 TSはその点、JSの実行速度と、スクリプト言語の弱点、 「調子乗って書いてたらグダグダになってきてヤバイっす」を型付加により多少は緩和出来る、という点でかなり立ち位置はいい。 しかもJSも今のところ死ぬ感じはないから、TSも勿論死なない。 一般的にはJSerは次第にTSerになっていくと見られているが、これも概ね正しいだろう。 確かにTSは駄目な点がない。 (界隈の駄目な点をJSからモロに受け継いでいるが)
- 574 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 00:50:50.85 ID:vIhtxp0O.net]
- 型無し糞言語は死あるのみ
型推論でスマートに型サポートを受けるのが今のトレンドだよ
- 575 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 01:01:08.81 ID:sfgrEAk/.net]
- 質問ですが
interface IPoint { x: number; y: number; } があるとして、(例えば)一致判定関数を書く場合、 function isequal(p1: IPoint, p2: IPoint) { return (p1.x == p2.y && p1.y == y2.y); } function isequal<T extends IPoint>(p1: T, p2: T) { return (p1.x == p2.y && p1.y == y2.y); } はどっちが良いの? どっちもプロパティー{ x: number, y: number }を持つ任意のオブジェクトを受け入れるので同等に見えまつ、
- 576 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 01:02:20.20 ID:sfgrEAk/.net]
- 戻り値を忘れたorz
: boolean 型推論って便利ですよね、、、
- 577 名前:539 mailto:sage [2020/10/11(日) 01:27:53.11 ID:B+MSoWxK.net]
- YouTube で有名な雑食系エンジニア・KENTA は、
初心者が進む道を、サーバー側言語のRuby → Go を王道としてる Python, PHP, JavaScript などを絶対に言わない 初心者のfirst choice としては難しすぎる。 挫折確率が高すぎる ただ年末に、Ruby 3.0 で型推論が入るから、 KENTA も、この方針を変えるかも知れない 大事件勃発! Ruby on Rails に頼っている、すべての学校の方針が変わってしまう ただ、first choice がGo と言うのは、絶対に無理
- 578 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 01:46:46.27 ID:+wOaiLh4.net]
- >>556
この場合は多分同等なのでシンプルな前者で良い 後者はTを他の箇所(戻り値やコールバック関数の引数など)でも使う場合に適していることがある 例えば function double<T extends IPoint>(p: T): T { p.x *= 2; p.y *= 2; return p; } とか function check<T extends IPoint>(p: T, validator: (p: T) => boolean): void { if (!validator(p)) { throw new Error('...'); } } とか ただしこれらの場合でも必ずしもextendsが適しているとは限らないので注意(特に上の例はかなり適当なので)
- 579 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 06:43:46.76 ID:vDn4Pmub.net]
- Pythonは型を書いてもインタプリタがそれを無視して実行してくれる
高速に実行したければPyPy使えばネイティブコードに近い速度で実行出来るしmypyで型チェックも出来る JavaScriptで型を書くと単に構文エラーになるだけだが、その内無視して実行してくれる様になるだろう そうなったらTypeScriptは要らなくなる
- 580 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 07:10:15.21 ID:qONvW7Si.net]
- 妄想おつ
- 581 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 07:22:42.40 ID:vDn4Pmub.net]
- Pythonみたいに動的型言語に型アノテーションを追加する事が主流になるだろう
Union型は動的型だから出来る事で、完全に静的型にするとC++みたいになってしまう 動的型+型アノテーションは良いとこ取りで、プロから初心者まで皆が満足出来る
- 582 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 07:34:29.67 ID:6reX+khV.net]
- Pythonは10年前にやったときは凄い言語機能だと思ったけど、それからあんまり進化しなくて今はJSにすら言語機能的には劣ってる。Pythonの良いとこ他の言語も取り込んじゃったからね。
でもそれとライブラリが充実してるってのは別問題で、このライブラリの充実っぷりがJS|TSにもあったら天下取れるのになぁと思う。 機械学習はライブラリの最適化がキモで言語の速度なんてほとんど関係ないし
- 583 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 08:43:37.68 ID:AhI6YFfN.net]
- なんどもコードの書き換えが必要な機械学習において
Pythonのような可読性にすぐれ、少ないコードで実行できる言語はが必要不可欠なのよ。 Cythonを使えば実行速度もC/C++と変わらないしね。 JavaScriptはTypeScriptとして生き残ると思われる。
- 584 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 08:44:44.80 ID:AhI6YFfN.net]
- >>558
そのYouTubeはPythonとJavaScriptで作られているという皮肉
- 585 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 08:59:02.53 ID:rXA2CZZq.net]
- >>562
最近の初心者がすぐ「俺がやってる言語スゲー、俺スゲー」なポジショントークに走る理由が分からん。 Pythonが良かろうが悪かろうが、お前の実績でもなかろうに。 結局のところ、「○○言語スゲー」をやってる奴は、「他言語なんて絶対学びたくないマン」であって、 それを正当化する為に言い訳をしているようにしか見えん。 それは549の「知り合い」も同じ。 ただ>>556が典型的な「型の問題点」で、 規模的に「見りゃ分かるだろ」な場合でも、型あり言語は型を書くことを強制され、 結果的に煩雑なコードになってしまっていた。 それ、JSで function isEqualPoint(p1,p2) { return (p1.x === p2.x && p1.y === p2.y); } だったら、悩む必要もなく、その先にさっさと進めてただろ、という話。(※) 普通の頭してたらこれで十分だ。 ちなみに(メソッドではない関数で)isEqualは短すぎ。 isEqualPointはお前らが大嫌いなハンガリアンだが、どう見てもPointを受け取る前提で、そうじゃなきゃエラーだと分かる。 それを型を書いてコンパイラにやらせるのがTSで、目で見て落とすのがハンガリアン。 ただ、コードの精度を上げたいなら併用すべきで、 形無しのisEqualというのは.NETみたいにisEqualインタフェースを全部の型に対して供給し、 isEqualを持っている型はこれ使えます、てな事をやるために使う。 ただこれは.NETは世界の全てがOOP前提だから出来るのであって、JS界隈ではかなり無理。 そしてそれ以前に、isEqualはPointのメソッドとして実装すべき。 メソッドであればそもそもPoint以外を与えようがなくなるし、見た目もハンガリアン同様にエラーを検出出来る。 そしてインタフェースへの拡張も見えてくる。 どうしても野良関数にしたければ、ハンガリアンにしておく方が無難だと思うが。 なおOOPの問題点は根本的にここら辺で、 この程度のどうでもいい規模しか書けない初心者にも無駄にいちいち考えることを強いて手を止めてしまう。 このレベルならグダグダ言わずに何とでも書いてどんどん先に進んだ方がいい。 どうせ今書いてるコードなんてゴミで、後から使える事はない。
- 586 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 08:59:27.04 ID:rXA2CZZq.net]
- 少し遠回りしたが話を※の時点に戻すと、
だから「全部について型を書け」というのは少々煩雑で、型あり言語は型推論で
- 587 名前:型を書かなくて良い方向に動いてる。
逆に、形無し言語は型をアノテートすることで、コンパイル時に落とせる方向に動いてる。 結果的に、どっちも同じような状況になりつつある。 落としどころは多分、C#の「ローカルは型推論、それ以外は型を書け」がまあ妥当なラインなのだろう。 だから初心者でこの辺の塩梅が分からないのなら、C#から入るのもありだと思うけど。 現実的にバランスが取れた仕様にはなってる。 >>563 JSが取り込んだPythonの良い所って何? そんなの初耳だが。 そもそもPythonが褒められてる点なんてマジで何一つないと思うが。 (ただし俺は10年も使ってないので歴史的経緯はほぼ知らんが) JS|TSが天下を取る為に必要なのは「同期」だよ。 asyncとかじゃなくて、普通の「同期」の方が分かりやすいし、実際スクリプト言語が担当する分野ではほぼそれでいい。 c10k問題等には非同期が有利なのは事実だが、見た目の分かり易さは「同期」の方が断然いい。 「それ、同期だったらそもそも理解する必要すらなくて、上から順に実行される、で済みますよね?」が多すぎる。 ただ、「非同期」は最早宗教だから、「同期」を入れることはないのだろうけどね。 「同期」が入れば、CPUリソースが厳しいサーバ側のPHP/Ruby/(ほぼいないが)Pythonの半分ほどはNodeに移行するだろう。 (実際、Goがその界隈で流行ってるのも、大した手間をかけずに快速が得られるからであって) また、普通のスクリプト業務、つまりPythonが蔓延っている分野でも、 Python同様に簡単に書け、速度は16倍なのだから、当然普段使いする奴が出てくる。(というか俺がそれ欲しい) そうすれば、ライブラリも充実していく。 「同期」がないから普段使いしにくいのがとにかく問題。 逆にPythonは実行速度が問題で、現実的な文句はほぼこれに尽きる。 だから彼等が何故高速化を目指さないのかは俺には本当に謎。 [] - [ここ壊れてます]
- 588 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 09:13:49.37 ID:/RVlCgv+.net]
- このおっさん長文書く割に知識浅いな
- 589 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 09:15:26.14 ID:xz6PduLx.net]
- >>565
あれPythonで作られてるから進化が遅いんだぞ 外向きにはPythonで問題ないって強弁してるが完全に負債化しちゃってる Pythonで作ったWebサービスあるある
- 590 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 09:29:24.51 ID:AhI6YFfN.net]
- 時代についていけない老害エンジニアがC/C++を必死に推してるように思うのだが
- 591 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 09:29:47.66 ID:vIhtxp0O.net]
- >>568
浅いというか個人 or 小規模開発しかしたことなさそう
- 592 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 09:36:16.20 ID:AhI6YFfN.net]
- Pythonの速度が遅いと言ってるのは情弱
Cで書いたライブラリに受け渡せばC言語の速度で実行できるし Cython使えばPythonのコードほぼそのままC言語の速度がでる Pythonで困るのはGUIくらいだろ?
- 593 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 09:40:52.87 ID:sfgrEAk/.net]
- 継承とジェネリクスが役割が被る領域において
TypeScriptではどっちの書き方がメジャー(もしくは効率的)とされているのかわからなかったのです><! >>559 レスdクス、 わかりた、
- 594 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 09:45:09.23 ID:sfgrEAk/.net]
- 次の質問なのですが、
タイプガードとか書くときにクラス(やハッシュ)にプロパティーが有るのか無いのか調べると思うのですが つぎのどっちの書き方が良さげ? (1) 'someProperty' in foo (2) foo.someProperty != undefined
- 595 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 09:45:54.29 ID:sfgrEAk/.net]
- なんとなく(2)の方が早いのではないか、という気がするのですが気のせい??
- 596 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 09:57:22.72 ID:rXA2CZZq.net]
- >>572
俺もCのDLLをスクリプト言語から呼ぶ、というのが現実的な解だとは思う。 ただ、Pythonの問題はそこじゃない。 演算を変えたい場合は結局Cを書く羽目になるから、結局Cも出来ないと駄目。 そしてCは仕様が小さいので、本気で正しく学べば簡単な部類だ。 GUIは今は現実的にHTMLがダントツで良く、何から何までWebアプリ化してる。 なら今ならElectronの方が相性がいい。当然JS/TS。 サーバ用途でPython使ったら大体は速度の問題にブチ当たるが、 これは「お気楽に書ける分遅い」というスクリプト言語の特有の問題であり、Rubyも同様で、回避手段がない。 (Nodeはgoogleの努力で例外的に異常に速いだけ) だからPythonは「何一ついいところはないが、何も悪くもない」という、ある意味「絶対的な2番手」だ。 だからこそ「絶対他言語を学びたくないマン」はこれに拘り、ポジショントークを繰り返す。 ただ、今時の言語なんてどれも似たようなもので、実際そこに拘る理由もなく、普通の奴は易々と言語の壁なんて飛び越えていく。 普通はこちらを目指すべきだと思うけど。 PHPもクソと言われて久しいが、いまだに蔓延っているのは、あの用途では絶対的に便利だから。 それはjQueryも同じ。
- 597 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 09:59:21.79 ID:vIhtxp0O.net]
- >>574
無料相談所じゃねえんだぞ調子に乗るな (2)にしろ (1)は型の保証までしてないから最後の手段 あとinterfaceはライブラリなど汎用的なコードに使うもの、普段はtypeを使え
- 598 名前:572 mailto:sage [2020/10/11(日) 10:02:33.58 ID:sfgrEAk/.net]
- ていうか自己解決しますた、
e: Event を e: MouseEvent として扱ってよいか(ダウンキャスト可能か)どうかを 確認するとき、(1)の書き方でないと MouseEventにあってEventに無いプロパティー (e.offsetXやe.offsetY())の有無の判定が書けませんぬ、
- 599 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 10:15:47.58 ID:AhI6YFfN.net]
- >>576
機械学習の勉強してみ。演算やアルゴリズムなんて二の次 三の次だから。 とにかく何度もコードを書き換えてひたすらパラメーターと変数の調整作業になる。 言語の実行速度よりコードの記述速度の方が大事になる。 この時はじめて「Pythonさん。なめててごめんなさい」って言いたくなる。
- 600 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 10:30:46.60 ID:rXA2CZZq.net]
- >>579
パラメータの変更しかしないのならそうだろうとしか。 俺は別にPythonを使うことが悪いとは言ってないぞ。 俺はJSを大変気に入っているが、それは「手抜きで書けるわりに速い」からだ。 だから俺はJSからCのDLLを呼びたいんだよ。 それがお前の場合はPythonなだけだろ。別に不思議でもないよ。
- 601 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 10:37:24.45 ID:AhI6YFfN.net]
- >>580
PythonはCythonを使えば ほぼPythonコードのままCのライブラリが作れるんだよ 速度はCで記述したものとほとんど変わらん
- 602 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 10:42:41.64 ID:rXA2CZZq.net]
- >>574
それはJSでは議論し尽くされた質問。多分ググッた方がいい。 会社で書く場合は多分コーディングルールでどっちにするか決まってる。 プロパティのありなしのチェックだけなら(1)の方が原理的に速い。 ただしJSの場合はundefinedという値を設定出来るので、その場合は(1)も(2)もアウトだが。 これはJSの仕様バグだが、この辺含めてJSは厳密な型管理には向いてない。 そもそも型無しなので当然だが。 >>578 そもそもダウンキャストが必要となってる時点でOOP的には邪道。 多分それは無駄にアップキャストしてるから。 OOP初心者あるあるの、張り切って無駄にOOPして余計に複雑になってるケースだと思うよ。 それも含めて頑張れでしかないが。
- 603 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 10:52:20.91 ID:rXA2CZZq.net]
- >>581
ならお前はPython/Cythonで一生暮らすでいいだろ。 俺はC使えるからCythonを使うことはないし、 Pythonも色々糞だからJSで
- 604 名前:マむところはJSで行く。
だからCscriptはそこそこ良かったのだが、MSはこれを捨ててPowerShellという別糞言語押しなのは残念。 [] - [ここ壊れてます]
- 605 名前:デフォルトの名無しさん [2020/10/11(日) 10:59:25.49 ID:kZXFoyze.net]
- >>549
>俺はPythonやってないが、最近かじろうとして、止めた。 >String.replace(regexp)がなくて、RegExp(str)しかなく、ああこりゃ駄目だ、と思った。 >なるほどPythonではクソコードしか書けない、というのは納得だ。 馬鹿ですね判ります
- 606 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 11:08:21.39 ID:kZXFoyze.net]
- >多分それは無駄にアップキャストしてるから。
型消去が必要な場面なんていくらでもあると思うが。 そもそもダウンキャストって動的な型判定でしかないんでOOPとは直交する概念だよな。
- 607 名前:576 mailto:sage [2020/10/11(日) 11:23:42.67 ID:sfgrEAk/.net]
- 自己解決しますた、2
e: EventのMoveEventへのダウンキャスト可能性判定は if (e instanceof MoveEvent) { ... } で逝けるっぽい こう書いたとき、VSCodeではブロックの中でe: MuseEventとしてのインテリセンスがばっちり利くスゲー;; さらにいうと、 https://developer.mozilla.org/ja/docs/Web/API/Element/mousedown_event の書き方をすると、addEventHandler()の宣言とラムダ式から型推論するらしく イベントハンドラ内に入った時点で勝手にMouseEventとして扱われる(スゲー)^2
- 608 名前:576 mailto:sage [2020/10/11(日) 11:25:20.20 ID:sfgrEAk/.net]
- >>582
>そもそもダウンキャストが必要となってる時点でOOP的には邪道。 HTML5とかを決めているmozilla.orgに言って、 ホスイ
- 609 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 11:26:44.35 ID:rXA2CZZq.net]
- >>584
String.replaceとRegExp.exec(str)は明確に用途が異なる。 だからそのどちらを使ったかで何を目的にしてるかをコード上に残せる。 Pythonはそれが出来ないから糞、というだけ。 どうやらPython教の「そのやり方は一つであるべき」が根本的にある。 これが「数ある中からそれを選んだ、それを持って意図を残す」俺と決定的に合わない。 なおRubyも同様に「いろんなやり方があるべき」であり、Pythonはプログラミング言語の中ではかなり異端だと思う。 だからこそ受けている、というのはあるらしいが。 なおJS、String.search と Regexp.test 等、大体においてその状況では交換可能なメソッドは多々あるし、 Array.map/forEach/filter/reduceも、無理矢理やれば大体交換可能だ。 これについては俺は => はクロージャ無し、つまり外変数を掴めない仕様にするべきだったと思う。 そうすれば => で与えている限り「無理矢理交換」は出来なくなり、コードも読みやすくなるし、エラーも文法的に落とせた。 現状では「無理なことをしてないか目で確認」するしかなく、これは型アノテーションではどうにもならない。 だから目で落とすハンガリアンを馬鹿にしていて、でも => の仕様不備には全く文句を言わないのは、 同様にお前らも単なる馬鹿かポジショントークでしかないからだよ。 実際、 => で与える関数で外変数を掴まなければならないケースなんて半数以下だし、 その場合は function と長々と書く、でよかった。
- 610 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 11:37:03.05 ID:rXA2CZZq.net]
- >>587
それはその通りだが、そもそもHTMLの仕様がOOP前提ではないので継承構造が綺麗になってない。 それを無理矢理それっぽく見せかけているのがHTMLElement(というかDOM)だが、 ちょこちょこ例外的なのがあって統一的に扱いきれない。 多分割と早い段階で無理だと諦めると思うよ。それも含めて頑張れだが。 mozallaが悪いわけではなく、OOP前提で作られてない物を載せ直そうとしてるから無理があるんだ。 なら不整合な古い仕様はばっさり切っていった方がいいと思うが、それは互換性の問題で切れないらしい。 だから、今後とも直ることもないよ。
- 611 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 11:39:39.85 ID:ZGWQTXgj.net]
- >>572
PythonはOO機能が中途半端で型システムも貧弱だからアプリケーションのコアとなるドメインモデルの実装には使われない Cythonでドメインロジック書くのはもっと非現実的 機械学習やデータ分析のようにコアとなる部分を汎用的にCでライブラリ化できるような用途には適してる NetflixやUberのようなテクノロジ先進企業がアプリのコアからPython外して 機械学習を含むデータ分析系かシステム管理系に絞って使ってる理由
- 612 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 12:42:35.57 ID:6reX+khV.net]
- >>588
外変数を掴まないArray関数? センス無いなぁ。やっぱあんたOOPしかできないでしょ
- 613 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 12:57:09.09 ID:AhI6YFfN.net]
- >>563
記述が簡単。ライブラリが充実。これが最強の所以だよ。 コードの学習コストと記述に時間がかからない分、他に時間をさける。 機械学習、データ分析、科学系でPythonの最強はしばらく続くだろう。 今話題のディープラーニングにおいてもPyTorchが最強の座に着こうとしている。 大企業が多額の資金を投入してね。 JavaScriptもネットでは必須なのでPythonと肩を並べる言語になるだろう。 この2つを極めたものだけが将来生き残れる。jabaは10年後には消えてるだろうな。
- 614 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 12:58:10.87 ID:AhI6YFfN.net]
- Javaねw
- 615 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 13:01:56.22 ID:rXA2CZZq.net]
- >>591
外変数を掴む前提ならreduceは全てforEachで代替出来る。 逆に言うと、わざわざreduceを入れたのは、見た目immutableにしたいだけ。(戻り値をconstで受けられる) しかし現状では与えた関数が外変数を変更していない、という確証が「文法的には」ない。 つまり、「見て判断」するしかない。 この辺がハンガリアンを馬鹿にしているお前らが理解出来てないところだ。 => がクロージャ無しなら、 const tmp = arr.reduce( => ); において、tmp以外の変数に変更がないことを文法的に保証出来た。 これをせずに、immutableだあ、型でエラーが落とせるだあ、なんて言ってる時点で意味ねえ、というだけ。 もっと効率的にエラーを落とせる仕様は有ったって事だよ。
- 616 名前:デフォルトの名無しさん mailto:sage [2020/10/11(日) 13:11:49.27 ID:6reX+khV.net]
- >>592
多分そのとおりなんだけどTS使いがPython使うとイライラするぜw 型情報もジェネリクスも貧弱だし、多少トリッキーでも短くて副作用のないコードを書くTS使いに対して、Python界隈は助長で副作用も使う簡易なコードを書く。 どっちが優れてるとは言わないけど。文化がかなり違うように感じる
|
|