{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## JavaScriptと静的型チェック\n", "\n", "今回使用する[JavaScript/TypeScriptの実行環境 tslab](https://github.com/yunabe/tslab)はTypeScriptをベースに実装されており、JavaScriptに対してもある程度の静的型チェックを行います。\n", "\n", "```javascript\n", "let x = 123;\n", "x += ' hello';\n", "console.log(x);\n", "```\n", "\n", "例えば上のコードは1行目では`x`の型は`number`であることを意図しているようにみえるのに、2行目で`string`を代入しています。tslabはこのようなケースに対してエラーを表示します。\n", "\n", "```\n", "2:1 - Type 'string' is not assignable to type 'number'.\n", "```\n", "\n", "ただし、上記のコードは`string`の代入が本当に意図的なのであれば正当なJavaScriptのコードです。そのような場合には[JSDoc](https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html#supported-jsdoc)を使って`x`が任意の型(`any`)をとりうることを明示する必要があります。\n", "\n", "```javascript\n", "/** @type {any} */\n", "let x = 123;\n", "x += ' hello';\n", "console.log(x);\n", "```\n", "\n", "このノートブックでは\n", "\n", "- `@param`, `@return`による[関数の型情報の宣言](https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html#param-and-returns)\n", "- 型チェックをパスするための[キャスト](https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html#casts)\n", "\n", "を利用しているので留意して下さい。型チェックの詳細については[Type Checking JavaScript Files\n", "](https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html)を参照して下さい。\n", "\n", "またtslabでは静的型情報を使っているので、強力なコードの補完(`Tab`)と変数・関数定義情報の表示(`Shift-Tab`)が使用可能です。活用しながらコーディングして下さい。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## TensorFlow.jsがインストールされていることの確認\n", "\n", "まず初めに、TensorFlow.jsが正しくimportでき実行できるかバージョンを表示して確かめてみましょう。ちなみにtslabでHTMLや画像を表示するには`tslab.display`を使用します。無事バージョン番号が表示されたでしょうか。\n", "\n", "ちなみにJupyter上では`Tab`でコード補完、`Shift-Tab`で関数定義などの表示が行えます。活用しながらコードを書いてください。" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "