Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaScriptハンズオン
Search
Sor4chi
August 06, 2023
0
100
JavaScriptハンズオン
Sor4chi
August 06, 2023
Tweet
Share
More Decks by Sor4chi
See All by Sor4chi
Docker入門
sor4chi
0
56
Reactを極めよう
sor4chi
0
110
TypeScriptハンズオン
sor4chi
0
68
DI/DIPを体験してみよう
sor4chi
0
430
Featured
See All Featured
Faster Mobile Websites
deanohume
305
30k
Into the Great Unknown - MozCon
thekraken
33
1.5k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Done Done
chrislema
181
16k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
YesSQL, Process and Tooling at Scale
rocio
169
14k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Scaling GitHub
holman
458
140k
The Cult of Friendly URLs
andyhume
78
6.1k
Transcript
JavaScriptハンズオン Github: @sor4chi 𝕏 Twitter: @monica18_pr
今日の目標 JavaScriptの知識を再確認する JavaScriptの文法を再確認する
1. JavaScriptの知識
JavaScriptができること ブラウザに動きをつける ボタンを押したら表示を変える HTTP通信を行う フォームの入力をチェックする サーバーを動かす ファイルを読み書きする(OSの機能を使う) HTTP通信を行う データベースを操作する
JavaScriptの特徴 ランタイムが必要 動的型付け
ランタイムが必要 ランタイムとはプログラムを実行するための環境のこと。 PythonならPython2やPython3というように、大体の言語は 文法 + ランタイムで提供されている。
しかし、JavaScriptは ECMAScript という文法のみが定義さ れており、ランタイムはそれぞれ色々なものがある。 例えば...
ブラウザのJavaScriptエンジン V8(Chrome) SpiderMonkey(Firefox) JavaScriptCore(Safari)
サーバーサイドのJavaScriptエンジン Node.js Deno Bun
動的型付け 変数の型を宣言する必要がない。 初心者でも扱いやすい反面、プログラムが複雑 or 大規模にな ってくると、型がないことによる問題が出てくる。
文字列を想定していた変数に数値が入っていた 配列を想定していた変数にオブジェクトが入っていた
そこで、 TypeScript というJavaScriptに型をつけることが できる拡張言語がある。 これは後日TypeScriptハンズオンで扱うのでお楽しみに。
2. JavaScriptの文法
文法と言っても完全解説できるほどシンプルな言語ではないの で、基本的な事項のみ触れます。 説明も端折る部分があるので気になったら調べるなどして理解 を深めてください。
変数 変数は var 、 let 、 const の3種類がある。
var 一番古い変数宣言の方法 変数の再宣言ができる ほとんど使わない 自分も使ったことほぼない
None
let 変数の再宣言ができない 変数の再代入ができる
None
const 変数の再宣言ができない 変数の再代入ができない
None
データ型 JavaScriptに限らず、プログラミング言語にはデータ型という ものがある。 これは動的型付け言語(=型を宣言しない言語)でも同じく、内部 ではデータ型が存在している。 例えば
これらは、単一のデータを持つ最小単位のデータなので「プリ ミティブ型」と呼ばれる。
None
これらは、複数のデータを持つことができるので「オブジェク ト型」と呼ばれる。 C++で言うところの構造体がオブジェクト型に近く、Vectorや Mapなどのコンテナが配列型に近い。 const は再代入を禁止する宣言であって、変数の中身を変更 することを禁止するものではないので注意。 他にもSetとかMapとか色々あるけど、今回は触れない。
演算子 演算子とは、数値や文字列などのデータを操作するための記号 のこと。
算術演算子 + 加算 - 減算 * 乗算 / 除算 %
剰余
None
JSは算術演算が数値型以外のデータに対しても行えてしまう。
None
みての通り、文字列型と文字列型を足すと文字列の連結にな る。 また、数値が演算に含まれるとtrue/falseは1/0に変換された り、文字列が演算に含まれると数値に変換されたりする。 なのに数字にキャストできない文字列が含まれると文字列の連 結になる。
こんな感じでJavaScriptは理解不能な挙動をすることがしばし ば... これも数十年の歴史がある言語なので、たびたびの仕様変更に よる互換性の問題があるためそう簡単には変えられない...のか も
TypeScriptを使えば解決できます!!!!!!!!!! これも後日...
代入演算子 = 代入 <op>= 代入演算子 ++ インクリメント -- デクリメント 言わずもがなの代入演算子。
== 等価 === 厳密等価 != 不等価 !== 厳密不等価 > 大なり
< 小なり >= 以上
None
== と === の違いは、 == は型の変換(キャスト)を行っ てから比較を行うのに対し、 === は型の変換を行わずに比較 を行うこと。厳密等価の方が安全なので、基本的には
=== を 使うことを推奨。
論理演算子 && 論理積 || 論理和 ! 否定
まあ、普通の論理演算子ですね。
三項演算子 条件式 ? 式1 : 式2
条件式がtrueなら式1、falseなら式2が評価される。 if文よりも簡潔に書けるが、ネストすると読みづらくなるので 注意。
例えばこんなやつ あくまでも綺麗に書く手段なので汚くなってしまうのであれば 使わない方が良い。
その他の演算子 typeof 型を返す in オブジェクトにプロパティが存在するか delete オブジェクトのプロパティを削除する などなど、あんまり使わないと思うので割愛。
制御構文 プログラムの流れを制御するための構文。
条件分岐 if 条件式がtrueの場合に実行 else 条件式がfalseの場合に実行 else if 条件式がfalseの場合に実行
None
繰り返し while 条件式がtrueの間、実行 do while 条件式がtrueの間、実行(使わん) for 初期化式、条件式、更新式を指定して実行
None
JSでは配列に対しての繰り返しを行うことがほとんどで、大体 が .map や .forEach を使うので、あまり使わないかも。
例外処理 try 例外が発生する可能性のある処理 catch 例外が発生した場合に実行 finally 例外の有無に関わらず実行
None
例外処理は、例外が発生した場合に処理を行うためのもの。 例えば、APIからデータを取得する処理を行う際に、ネットワ ークエラーなどでデータが取得できなかった場合に、エラーを 表示するなどの処理を行うために使う。
関数 処理をまとめておくためのもの。
関数の種類 関数宣言 関数式 アロー関数
関数宣言
関数式
アロー関数
さらに短く書くこともできる。 returnだけのアロー関数は、returnを省略することができる。
違いはあんまり気にしなくていいので、好きな方を使うと良 い。 ただ、それを使うと決めたら、一貫して使うようにすること。
3. 文法テクニック
配列の高階関数操作 配列の高階関数操作は、配列の要素を操作するためのもの。
map 配列の要素を一つづつ取り出して、新しい配列を作成する。
問題1 配列 [1, 2, 3, 4, 5] の要素をそれぞれ2倍した配列を作 成して、コンソールに出力してください。 最初の一行は
としてください。
問題1の解答
問題1の解答(短く書く)
filter
None
問題2 配列 [1, 2, 3, 4, 5] の要素のうち、偶数の要素だけを取 り出した配列を作成して、コンソールに出力してください。 最初の一行は
としてください。
問題2の解答
find
None
問題3 ちょっと難しいかも 配列 [1, 2, 3, 4, 5] の要素のうち、真ん中の要素を取り 出して、コンソールに出力してください。
ただし、配列の要素数を取得する方法は なんかの配 列.length で取得できます。また、切り捨ての関数は Math.floor( 小数点以下の数字) 、切り上げの関数は Math.ceil( 小数点以下の数字) で取得できます。 最初の一行は
問題3の解答
他にも forEach や reduce など面白い高階関数はたくさん あるので、興味があれば調べてみてください。
オブジェクトの分割代入 オブジェクトの分割代入は、オブジェクトのプロパティを変数 に代入するためのもの。
これを分割代入を使うと
と書くことができる。 めっちゃ便利なので、覚えておくと良い。
デフォルト引数 デフォルト引数は、引数に値が渡されなかった場合に、デフォ ルトの値を設定するためのもの。
JSでは、引数に値が渡されなかった場合、 undefined とい う 値 が渡される。 (型がないので undefined という値を渡すしかない。)
これをデフォルト引数を使うと、上のコードはこのように書く ことができる。
スプレッド構文 スプレッド構文は、配列やオブジェクトを展開するためのも の。
配列の展開
オブジェクトの展開
4.ブラウザ側のJS ブラウザ側には、 window や document といったブラウザ の値取得や操作ができるに関するグローバルオブジェクトが存 在する。 もちろん ECMAScript
の仕様には載ってないので、 V8 や SpiderMonkey といったブラウザのJSエンジンによってES を拡張して実装されている。
window window は、ブラウザのグローバルオブジェクトで、 window オブジェクトのプロパティやメソッドは、 window を省略して書くことができる。 (多分省略する方が多い。)
None
document document は、 DOM を操作するためのオブジェクト。
確認 DOM とは、Document Object Modelの略で、HTMLの要素 をオブジェクトとして扱うための仕組み。 つまり HTMLの要素 -> JSのオブジェクト
として扱えるようにするものが document であり、それを DOM 操作と呼ぶわけだ。
DOM操作1. 要素の取得
DOM操作2. 要素の作成
DOM操作3. 要素の追加
DOM操作4. 要素の削除
などなどDOM操作も色々できます!
5. サーバーサイドのJS 今回は、サーバーサイドのJSとして、 Node.js を使ってみ る。
ファイルシステムへのアクセス 例えば、サーバーサイドのJSで、ファイルを読み込んで、その 内容をブラウザに表示するということをやってみる。
ファイルの読み込み
ローカルの、jsと同じディレクトリに test.txt というファ イルを作成して、その中に好きな文字列を書いておく。 node JS ファイル名 で実行すると、 test.txt の中身が表
示される。
ファイルの書き込み
test.txt の中身が Hello World になる。
HTTPサーバーの作成
これだけで、 localhost:3000 にアクセスすると、 Hello World が表示されるサーバーが作成できる。 ただNode.js単体のWebサーバーはとても書きづらいのであま り使われない。代わりにFrameworkを使う。
6. フレームワーク こんな感じで、ブラウザのVanilla JSも、サーバーサイドの Vanilla JSも、それぞれの機能を使って、色々なことができる ように提供してくれてるが、そのぶん、色々と書くのが大変。 そこで、フレームワークを使うと、簡単に色々なことができる ようになる。
フレームワークの種類: フロントエンド(ブラ ウザ側) React Next.js(React) Remix(React) Vue.js Nuxt.js(Vue.js) などなど
フレームワークの種類: サーバーサイド Express Hono.js Koa などなど
色々なフレームワークを触って比較できるようになると強いと 思います。
ご清聴ありがとうございました 質問などあれば気軽にどうぞ!