トップページtech
985コメント300KB

TypeScript part1

■ このスレッドは過去ログ倉庫に格納されています
0001 ◆9Zst2CqO/Y 2012/10/02(火) 23:18:47.60
http://www.typescriptlang.org/

TypeScript is a language for application-scale JavaScript development.
TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.
Any browser. Any host. Any OS. Open Source.
0073デフォルトの名無しさん2012/10/04(木) 23:18:41.73
いろんな言語で幅広く仕事をしたが
結局のところ、言語の良し悪しは
大した問題ではない。
0074デフォルトの名無しさん2012/10/04(木) 23:25:12.10
じゃあアセンブラで業務アプリ書いて
0075デフォルトの名無しさん2012/10/05(金) 00:00:20.72
>>73が使った言語: Java, VB, Perl, PHP, JS
0076デフォルトの名無しさん2012/10/05(金) 00:50:23.87
>>73
>>73が使った言語:�lisp,�c++,�c,�haskel,�c#
0077デフォルトの名無しさん2012/10/05(金) 01:28:13.01
でもjavascriptで開発するとソース丸見えじゃね?
0078デフォルトの名無しさん2012/10/05(金) 01:36:09.64
サーバーありきだからどうでもいい
0079デフォルトの名無しさん2012/10/05(金) 03:33:53.11
クライアントアプリケーションでJavaScriptを組み込んで使えると便利そう
scheme 系とか組み込みで地味に利用されてる

でもエンジンのAPIが組み込めるように公開されてる訳ではないので
IE9以降がメインターゲットなんだろうかな

Qtscipt は ES3.1
http://qt-project.org/forums/viewthread/5381
ECMA-262 (5th|Harmony|next) で宣言された プロトタイプ の拡張はアリ?ナシ?
http://qiita.com/items/3a70b5a62b6c87379c77
JScript でサポートされる機能
http://msdn.microsoft.com/ja-jp/library/49zhkzs5(v=vs.80).aspx

How to call the compiler from .NET?
http://typescript.codeplex.com/discussions/397810

結局 MS Script Control でやれとなる。(当然エンジンはES3.1相当のJSctiptの構文のみが使える
エンジンは非公開だからなぁ…ブラウザ対応次第かと(特にモバイル
0080デフォルトの名無しさん2012/10/05(金) 04:16:11.04
>>73
アセンブリャーからObjective-Cまでいろんな言語で幅広く仕事をしたが
言語の良し悪しは大した問題ではない(APIや周辺コミュニティのほうが重要)という通念を覆すほど
JavaScriptはクソ

以前からずっとバッドノウハウを量産して喜んでた界隈の連中を横目で眺めつつ
おかしいと思ってたんだよ。
0081デフォルトの名無しさん2012/10/05(金) 04:27:02.48
LL言語マンセーだの動的言語マンセーだの喧しいからそういうものかと思ってたが
HTML5HTML5うるせーから仕方なく1ヶ月程度でキャッチアップしてみたら
お前らこんなどうしようもない言語と環境で仕事してたの、としか言いようがなくて

要はろくに大規模開発したことのない、レベルの低いJavaScripterどもが
駄サイクルを作ってたんだなという認識ですね。
0082デフォルトの名無しさん2012/10/05(金) 04:32:08.45
機能もTypeScript登場で「JSの時代!」という無邪気なツイートを見かけたが、
CoffeeScript、Dart、JSX、Haxe、TypeScript、その他無数の変換言語↓
https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS
これら全部現行のJavaScriptを否定しに来てるというのがまだ理解できないようでは終わっとる

JSが基幹言語?その逆で、ただの土管扱いされてるんだよ。
使いもんにならん言われてるんだよ。わざわざ新言語を量産してまで。

今回、あのHejlsbergにまでノーと言われたんだよ。
0083デフォルトの名無しさん2012/10/05(金) 06:54:50.23
cにclassとinterfaceとgcとarrayとhash付ければ
それでよかったんだよ、IDEも豪華に対応できたんだよ
言語開発者はみんな余計な物付けすぎ
0084デフォルトの名無しさん2012/10/05(金) 08:23:06.55
>>81
典型的な一ヶ月程度勉強しただけの
やつの感想ですねw
0085デフォルトの名無しさん2012/10/05(金) 08:59:31.24
Javascriptはこんなクソコードが通るからゴミ


function f(x, y) {
    return x + y;
}
alert(f(1, "23")); # 123




なお、Typescriptで型を付けても通る(暗黙の型変換)

function f(x: number, y: string) {
return x + y;
}
alert(f(1, "23"));
0086デフォルトの名無しさん2012/10/05(金) 09:23:17.34
C#でもJavaでも通るよ
0087デフォルトの名無しさん2012/10/05(金) 09:35:19.35
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind
http://kangax.github.com/es5-compat-table/

javascript 1.8.5とかガンガン攻める姿勢は買ったげる
でも ie8 軒並みアウトなんや
0088デフォルトの名無しさん2012/10/05(金) 09:42:02.14
MSと違って規格がポシャったら互換性切っても怒られないからな
0089デフォルトの名無しさん2012/10/06(土) 00:03:37.41
>>86
C#もJavaも糞言語じゃん
0090デフォルトの名無しさん2012/10/06(土) 00:18:37.03
>>89
じゃあお前の好きなクソ言語の名前言ってみな。
それがクソかどうか判断してやるからさw
0091デフォルトの名無しさん2012/10/06(土) 01:06:52.73
ドカタの判断 = 俺に使いこなせない言語はクソ
0092デフォルトの名無しさん2012/10/06(土) 02:22:41.18
使いこなせないんじゃない。
ドカタ言語をあえて選ばないだけだ。
0093デフォルトの名無しさん2012/10/06(土) 06:11:05.60
JSを使うくらいならTypeScriptを使ったほうがマシというだけで、JS以外の言語より良いという話ではないよ
それにまだ未完成品だし
0094デフォルトの名無しさん2012/10/06(土) 10:59:35.49
言語の良し悪しは、言語仕様よりも、言語環境できまる。

実行環境の多さ、ライブラリの多さ、ノウハウの多さ、
書籍の多さ、提供会社の多さ、使用ユーザーの多さ、などなど。

それがわからない奴は、どうして良い言語が普及しないんだ!と
悩むことになる。
0095デフォルトの名無しさん2012/10/06(土) 11:07:30.37
JSはバッドノウハウの塊だから決して良いとは言えない
ただデファクトスタンダードを取ったというだけ
これは市場が選んだわけではない。勝手に決められて嫌々ながらも従わざるを得なくなった
従いたくない人たちが魔改造を繰り返してる
0096デフォルトの名無しさん2012/10/06(土) 11:25:54.39
バッドノウハウってなんのこと?

Perlでクラスを作るにはいろんな方法があります。
これがバッドノウハウです。みたいな話?w
0097デフォルトの名無しさん2012/10/06(土) 13:28:03.37
http://stackoverflow.com/questions/12756423/is-there-an-alias-for-this-in-typescript

lambda式内で this 参照はできないんかな…
0098デフォルトの名無しさん2012/10/06(土) 13:41:26.38
>>94
言語が普及するか否かは、言語の良し悪しでは決まらない


普及する = 最底辺の馬鹿でも使える、が大前提だからね
0099デフォルトの名無しさん2012/10/06(土) 14:03:38.71
>>98
言語を馬鹿にしているのか、
それを使ってる人を馬鹿にしているのか。
はっきりさせていい?

お前が馬鹿にしているのは、使ってる人であって言語じゃないよね。

普及した優れた言語。
それは馬鹿でも使えるが当然天才でも使えるんだよ。

お前が馬鹿にしているのは、天才が使っている優れた言語、ではない、

単に馬鹿でも使えることが、悔しいんだ。
なぜだろうねw
0100デフォルトの名無しさん2012/10/06(土) 14:28:40.06
で、Javascriptは糞、ということに関してはコンセンサスとれてますよね。
まさかWeb2.0だAjaxだHTML5とかいうバズワードでノセられた奴が強弁してないよね。
0101デフォルトの名無しさん2012/10/06(土) 14:29:38.54
>>100
お前がJavaScriptとライブラリをごっちゃにしてるってことはよくわかったよ。

馬鹿が言った言葉は、やっぱり馬鹿だってわかるなw
0102デフォルトの名無しさん2012/10/06(土) 15:18:00.94
バズワードをガン無視してる俺かっけーw
0103デフォルトの名無しさん2012/10/06(土) 17:55:07.32
無能すぎて食って行くだけで必死の奴は
仕事にありつけそうな言語使えば良いよ
0104デフォルトの名無しさん2012/10/06(土) 18:03:58.51
デブでもおばはんでも乗れるママチャリが普及してるからって
ロードレーサーにママチャリ乗れっていう馬鹿はいない
0105デフォルトの名無しさん2012/10/06(土) 18:07:43.57
近所のコンビニにライダーブーツ履いてNS400に乗って行くんだ
0106デフォルトの名無しさん2012/10/06(土) 18:15:57.46
ところが原付になんでもやらせようとしだすから
0107デフォルトの名無しさん2012/10/06(土) 18:29:01.76
Typescriptは原付を改造パーツでチューンナップしようって発想
改造しても所詮原付は原付
0108デフォルトの名無しさん2012/10/06(土) 20:41:39.23
はっきりいって、c++とhtml5,jsだけで良いよね
実装が増える毎にVMの中のヒトたちが対応しきれない悪寒
0109デフォルトの名無しさん2012/10/06(土) 20:49:42.85
お前よりもVMの中の人達は優秀。
対応しきれないのはお前だけ。
0110デフォルトの名無しさん2012/10/06(土) 20:50:16.95
>>108
>>103
0111デフォルトの名無しさん2012/10/06(土) 21:01:43.24
>>85
型付けても通るとかダメダメじゃん
0112デフォルトの名無しさん2012/10/06(土) 21:21:09.30
組み込みの文字列連結がある言語なら一番普通の動作だろ
0113デフォルトの名無しさん2012/10/06(土) 21:30:01.28
型付けてるんなら x + y; の挙動は
コーディング時に明確に予測できるはずだから何の問題もないだろ
その程度の言語仕様も知らずに使える言語が欲しいってことか?
0114デフォルトの名無しさん2012/10/06(土) 21:40:08.37
>>111
なんで通らないと思ったの?
0115デフォルトの名無しさん2012/10/06(土) 21:41:49.61
>>112
え?
0116デフォルトの名無しさん2012/10/06(土) 21:45:19.13
動的言語で普通この手の話で問題視されるのは「結果が予測できないこと」なわけで
yの内容によって文字列連結になったり数値加算になったりするなら問題だが
そうでなくて挙動が完全に予測できるんなら全く問題ない
0117デフォルトの名無しさん2012/10/06(土) 21:46:17.70
暗黙の型変換の話であって
動的言語とか全く関係ないんだが
0118デフォルトの名無しさん2012/10/06(土) 21:49:23.06
文字列とその他の+ではその他の方を
文字列に変換してから連結する仕様になっている言語はかなり多いからごく自然なことだが
暗黙の変換だろうが言語仕様知ってりゃ予測できるだろ
0119デフォルトの名無しさん2012/10/06(土) 21:55:11.18
つーか、ただの演算子オーバーロードでは?

文字列.add(文字列)
文字列.add(数値)

addメソッドがオーバーロードされてるのと同じ事だろう。

型の問題っていうのは、互換性がない型、オーバーロードも定義さていないもの、
無関係のものを代入したら動かないのに、それが実行されるまで
わからないってのが問題なのに。
0120デフォルトの名無しさん2012/10/06(土) 21:58:45.78
言語仕様の範囲ならどんな振舞いだって原理的に予測可能だわな
0121デフォルトの名無しさん2012/10/06(土) 22:00:55.75
>>119
むしろ動いちゃうのが問題
>>85で引数に型指定しない場合だと、x, yの内容によって+の挙動が全く異なってしまう
さすがに+使うときは、文字列連結か数値加算かどちらか一方しか期待してないだろうから、
予期しない動作によるバグの原因になる。
型を指定するなら何の問題もない。
0122デフォルトの名無しさん2012/10/06(土) 22:26:37.51
http://www.typescriptlang.org/Playground/

上で遊んでみたんだけど、まだ型推論は全然だね
こんなコードが通るし

function foo() : number { return 1; }
function bar() : string { return "23"; }
function baz(f, g) { return f() + g(); }
function hoge() : number { return baz(foo, bar); }

でもMSはF#を作れるところだし、今後に期待ってところか
0123デフォルトの名無しさん2012/10/06(土) 22:37:34.93
それってC#で言えば
private var func(){...}
で型推論してくれよって話じゃないか。
0124デフォルトの名無しさん2012/10/06(土) 22:47:46.52
>>122
型推論はAIじゃねぇよ。
どちらでも取れる問題の
正解を出せなんて不可能な話。
0125デフォルトの名無しさん2012/10/06(土) 23:10:28.55
どちらでも取れる?
hoge()の戻り値はstring以外ありえんだろ
0126デフォルトの名無しさん2012/10/06(土) 23:12:02.77
>>125
どこかでオーバーライドするかもしれんだろ。
windows.hoge = function () {return 123}
0127デフォルトの名無しさん2012/10/06(土) 23:14:24.55
>>126
>>122でstring返す関数にnumberって型書いてエラーにならないのと
何の関係があるのそれ
0128デフォルトの名無しさん2012/10/06(土) 23:16:05.29
>>126
それは無いものと考えないと静的解析の意味無い
ジェネリックには対応する予定らしいからもうちょっと型推論も強力にはなるんじゃないの
0129デフォルトの名無しさん2012/10/06(土) 23:21:13.60
上はエラーになって下がエラーにならないんだから、もうね...

function f() : number { return 1 + "2"; }
function g() : number { return ((x,y) => x + y)(1, "2"); }
0130デフォルトの名無しさん2012/10/06(土) 23:25:25.05
だんだんイチャモンになってきたな。
0131デフォルトの名無しさん2012/10/06(土) 23:26:58.75
いやいや、間違った型を書いてもエラーにならないのは
型を全然書かないより邪悪ですから
0132デフォルトの名無しさん2012/10/06(土) 23:32:40.25
さすがに型まで書いてるのに
数値の加算が文字列連結になったらびっくりするだろ

でも>>129のgの戻り値を使ったら、そういうことが起こる
0133デフォルトの名無しさん2012/10/07(日) 00:07:25.88
>>132
お前、数値オブジェクトと演算子オーバーロードって
発想が頭にないんじゃないのか?

A + B というのは演算子 = メソッド と考えると
A.+(B) という形に置き換えられる。
お前が理解しやすい形にするとA.add(B)

つまりはこういうことだよ。
String ret = num.add(str);

0134デフォルトの名無しさん2012/10/07(日) 00:08:54.88
たんに、数値オブジェクトのaddメソッドは
取りうる引数に、数値オブジェクト以外に
文字列オブジェクトに対応している。
0135デフォルトの名無しさん2012/10/07(日) 00:11:41.68
どうでもいいけどアンダース的には演算子はインスタンスメンバじゃなくて静的メンバだよ
0136デフォルトの名無しさん2012/10/07(日) 00:16:00.15
>>133>>134
で?それが

function f(x : number, y : number) { return x + y; }

においてfが文字列連結を実行しても良い理由になるの?
0137デフォルトの名無しさん2012/10/07(日) 00:18:33.48
>>136
両方が数値の場合は、数値計算ですよ?
片方が文字列の場合は、文字列結合バージョンの加算が呼ばれます。
0138デフォルトの名無しさん2012/10/07(日) 00:20:10.83
>>137
>>136のfの引数に>>129のgの戻り値を入れてみ?
0139デフォルトの名無しさん2012/10/07(日) 00:21:52.90
>>97
Local "_this" silently conflicts in arrow function
http://typescript.codeplex.com/workitem/11

いちおう Issue Tracker に挙がってるけど

Capturing instance methods breaks 'this'
http://typescript.codeplex.com/workitem/127

this 周りは仕様に注意を要する部分ではあるとは思う
0140デフォルトの名無しさん2012/10/07(日) 00:21:57.68
普通に数値計算されましたが?
0141デフォルトの名無しさん2012/10/07(日) 00:22:09.72
C#で(int)(object)"1"とかやっても通るのと一緒だろ
動いちゃうのは問題だが
0142デフォルトの名無しさん2012/10/07(日) 00:24:17.11
>>140
あほか。すぐバレる嘘付くなよ
g()は文字列"12"なんだからfに入れたら文字列加算になるよ
gの型注釈がnumberだから型エラーにはならないけど
0143デフォルトの名無しさん2012/10/07(日) 00:26:02.74
>>142
バージョン古いんじゃないですか?w
0144デフォルトの名無しさん2012/10/07(日) 00:26:12.93
コンパイルオプションで実行時に型チェックするモードがあったほうがいいな
型推論をいくら完璧にしようが>>141みたいなのはどうしようもないし
0145デフォルトの名無しさん2012/10/07(日) 00:26:46.89
>>143
バージョンwwwお前ばかすぎ
0146デフォルトの名無しさん2012/10/07(日) 00:31:14.49
>>144
明示的なキャストは自己責任だと思うけど、実行時の型チェックは欲しいね
0147デフォルトの名無しさん2012/10/07(日) 00:32:20.49
互換性のために仕方ないことでしょ。

そのうち、strictモードみたいなのでて
レガシーコードと呼ばれるようになるさ。
0148デフォルトの名無しさん2012/10/07(日) 00:35:32.63
ようするにみんなの結論は
ベストではないが、ベターな言語なんだろ?
0149デフォルトの名無しさん2012/10/07(日) 00:36:39.20
Javascriptよりはマシ
0150デフォルトの名無しさん2012/10/07(日) 00:38:15.16
標準準拠で互換性があってベターなら使わない理由はないな。
0151デフォルトの名無しさん2012/10/07(日) 00:38:50.82
別に普及しなくてもいいけどGoogleのDartみたいなバカだけでも潰してくれ
0152デフォルトの名無しさん2012/10/07(日) 00:40:12.05
まだ様子見の段階
0153デフォルトの名無しさん2012/10/07(日) 00:40:48.57
Dartよりはマシ
0154デフォルトの名無しさん2012/10/07(日) 00:52:18.16
MSだからいつものようにボロカスに叩かれるかと思ったら
微妙な反応が多くて面白いなw
CofeeScriptやDartがいかにクソだったかがわかる
0155デフォルトの名無しさん2012/10/07(日) 00:58:25.61
MSはプログラミング言語と開発環境には定評と実績がある
0156デフォルトの名無しさん2012/10/07(日) 01:08:31.94
案外海外のほうがアンチMS的な反応が多かった。
どうせすぐハシゴ外すんだろ、みたいな。
0157デフォルトの名無しさん2012/10/07(日) 01:11:13.27
それが一番当てはまるのはGoogleだろ
MSがIEに独自言語の処理系載せたりしたら永遠に外せなくなるぞ
0158デフォルトの名無しさん2012/10/07(日) 02:03:33.96
ぶっちゃけDart発表時のほうが盛り上がってたよね
オプションで型チェック出来て素晴らしいって感じで

もっともダウンキャストに警告すら出さないと判明してから
そっぽ向かれたけど
0159デフォルトの名無しさん2012/10/07(日) 02:27:42.80
Dartがそっぽを向かれたのはダウンキャストの警告とかが原因ではなくて、
良い言語だけど、乗り換えないといけない。つまり文法的に互換性がないということだろう。

TypeScriptにはそれは当てはまらなくて、将来のECMAScriptを
先取りしているから、JavaScriptの正統な進化版として考えることが出来る。
0160デフォルトの名無しさん2012/10/07(日) 02:51:35.93
>>154
ヘルスバーグの名前が出てるからとりあえずみんな様子見てるんじゃないの?
0161デフォルトの名無しさん2012/10/07(日) 06:40:43.56
(function (a, b?) => { console.log(a, b); })("a"); // OK
((a, b?) => { console.log(a, b); })("a"); // Errors
((a?, b) => { console.log(a, b); })("b"); // Errors
((a, b) => { console.log(a, b); })("a", "b"); // OK

悪くないんだけど、微妙に C# 独自の nullable とか this とか
アロー演算子合わせるとエラーに塗れる傾向はあるな
その辺なんか謎だわ

Nullable 型
http://ufcpp.net/study/csharp/sp2_nullable.html
0162デフォルトの名無しさん2012/10/07(日) 07:32:08.05
http://code.msdn.microsoft.com/windowsdesktop/7-null-null-null-48ae7f82

nullable導入のおおまかな経緯はこんなかんじ。

何でNullがオブジェクトなの?
https://gist.github.com/2325537
Type(null) は Null 型だから Object ではないってことですか。typeof とは違うんですね。
http://togetter.com/li/300821
http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null
https://gist.github.com/887049

しかして typeof が理解に苦しむ
ほんとは null はオブジェクトとして扱いたくないんだけど

実際のとこ至るところでYou、typeofでObjectt判定しちゃいなよ
してるから null はオブジェクトみたいに扱われてるんだなと…
0163デフォルトの名無しさん2012/10/07(日) 08:31:48.05
>>159
Dartを良い言語と言ってる時点で
Java, JS, Perl, PHP程度しか使った事が無い
ドカタまるだしなのが分かる。
もうちょっとマトモな言語も使ったら良いよ。
0164デフォルトの名無しさん2012/10/08(月) 11:12:46.64
マトモな言語教えてください
0165デフォルトの名無しさん2012/10/08(月) 14:20:32.38
VB
0166デフォルトの名無しさん2012/10/08(月) 15:45:07.25
>>72
jsだけで飯が喰えるのに、いくつも言語おぼえる必要があるなんて
2次請け、3次請け以下の大した技術力のない奴隷商に飼われているとしか思えない。
0167デフォルトの名無しさん2012/10/08(月) 15:54:21.68
むしろjsの仕事なんてドカタ仕事しかない
0168デフォルトの名無しさん2012/10/08(月) 16:13:57.29
また苦しくなったらドカタかw
よっぽど都合がわるいんだろうなw
0169デフォルトの名無しさん2012/10/08(月) 16:15:40.20
他人が薄給ドカタ仕事を引き受けてくれるのに
何の都合が悪いというの?
0170デフォルトの名無しさん2012/10/08(月) 16:22:08.31
>>166
底辺の奴らだけが、奴隷市場の流行に合わせて
Java, VB, PHP, JavaScript 等を覚える必要がある
0171デフォルトの名無しさん2012/10/08(月) 16:27:02.20
>>169
いや、単純にじゃあドカタじゃないやつは
なんて呼ぶの?って話だよw
0172デフォルトの名無しさん2012/10/08(月) 16:31:15.67
週40時間労働、年収800万以上でプログラマを名乗れます
それ以下はドカタ
■ このスレッドは過去ログ倉庫に格納されています