0.はじめに
TypeScriptをCoffeeScript風に書けるCivetのメモ書き。
公式ページはこちら。
※英語のページですので注意。
1.準備
下記ページを参考に動作環境を整えていきましょう。
・プレイグラウンド
・インストール
npm i -g @danielx/civet
・実行
civet source.civet ...args...
2.ハローワールド
先頭の"civet coffeeCompat"
ディレクティブの指定で互換モードに。
"civet coffeeCompat"
# コメント
print = (value) ->
console.log value
return
### これもコメント ###
str = "ハローワールド!"
print str
// コメント
var print, str;
print = function (value) {
console.log(value);
return;
};
/* これもコメント */
str = "ハローワールド!";
print(str);
おもむろにオンラインのコード実行環境のwandboxに張り付けて見ると、、、
なんということでしょう(汗
https://wandbox.org/permlink/JPKOOdhMt1hfIB2s
prog.ts(1,5): error TS2300: Duplicate identifier 'print'.
prog.ts(2,1): error TS2539: Cannot assign to 'print' because it is not a variable.
prog.ts(7,7): error TS2554: Expected 0 arguments, but got 1.
../../opt/wandbox/typescript-4.2.4-nodejs-14.16.1/node_modules/typescript/lib/lib.dom.d.ts(19701,18): error TS2300: Duplicate identifier 'print'.
重複しているので、名前を変更するかexport
したらよいようですが、ちょっと混乱してるので一旦TypeScriptで記述します(汗
export default function print(value) {
console.log(value);
return;
}
import println from "./prog";
println("ハローワールド!");
https://wandbox.org/permlink/haYGGwZNYHIBkqnG
期待通りに動きました、、、TypeScriptあまり使った事無いので、こんなことになるとは思っても見ませんでした(汗
※以降print
を使用したコードは、println
に変更していきます(問題無いことを祈ります)。
CoffeeScript互換モードについては下記ページを参照。
3.追加変更箇所の一部紹介(型注釈、修飾子、代入演算子、コメントなど)
変数に自動でvar
を付与するモード。
"civet autoVar"
// これはコメント、#はプライベート変数で使用します。
/* var修飾子、関数の引数や返り値の型注釈も出来ます。 */
var println = (value: any): void ->
console.log value
### この変数はvarで修飾されます。 ###
str = "型注釈①"
println str
自動的にlet
を付与するモード。
"civet autoLet"
// let修飾子、左辺にも型注釈出来ます。
let println: (value: any) -> void = (value: any): void ->
console.log value
// .=でlet修飾子を付与、勿論型注釈も。
str: string .= "型注釈②"
println str
型エイリアスでスッキリ。
type PrintLn = (value: any) -> void
// const修飾子も使えます。
const println: PrintLn = (value) ->
console.log value
// :=でconst修飾子を付与。
str: string := "型エイリアス"
println str
トランスパイル後の関数内にreturn
が残ってる気がしますが...
type PrintLn = (value: any) => void;
const println: PrintLn = function (value) {
return console.log(value);
};
const str: string = "型エイリアス";
println(str);
return
が付与される行の最後にセミコロン;
を付けるとreturn
が消せます(または、ディレクティブ-implicitReturns
で設定解除)。関数の定義にはfunction
も使えます。
"civet -implicitReturns"
function println(value)
console.log value;
println "暗黙的なリターンの解除"
return
が消えましたね!
function println(value) {
console.log(value);
}
println("暗黙的なリターンの解除");
4.おわりに
気が付いたら日本語に対応していた!と思って勢いで記事を書いておりますが、誤りなどありましたらご指摘いただけると助かります。
と書きつつ、TypeScriptに変換後に変数名の重複がありエラーになっていたのは確認不足でした。ごめんなさい。
他にもパイプやオペレーター、関数のオーバーロード等々沢山書くことがありそうですが、一旦ここで止めます。
最後まで読んでいただきありがとうございますm(_ _)m