なめこ備忘録

プログラミングに関する備忘録や経験したこと,考えたことなど好き勝手書きます.

[tex: ]

JavaScriptとNode.jsに関して

はじめましての後の最初の記事はプログラミングに関するものです.

タイトルの通りNode.jsです.ええ,JavaScriptですとも.
プログラミングしようと思った時に,自分の中で真っ先に出てくる言語ってありますよね.
私はそれが JavaScript なわけです.

ということで,今後の記事の内容がJavaScriptに偏りそうなので,先に前提となる部分を書き留めておこうかと思います.
JavaScriptの沼が深いのと,私の知識がそんなにないので,違ってたりするかもしれませんが悪しからず.

JavaScriptとは

ご存知の通り,プログラミング言語です.Javaとは全く違います
間違えると怒る人もいるので気をつけましょう.
実行環境は主にWebブラウザとなっており,Webページの動的処理の部分をよく担当するような,そんな言語です.

略称・拡張子は ' js ' です.
理由は言いませんが,略称をむやみに言い過ぎるのはやめましょう.

JavaScriptの特徴

すごくざっくりと言ってしまうと,結構何でもありな言語です.
以下に特徴をいくつか並べていきますが,後半になる程特殊なものが増えると思います.

変数宣言時の型

宣言時の型の明示がありません.全部 var です.
最初に入れたもので勝手に判断されます.

var a = 1; // たぶんint型
var str = 'string'; // たぶんstring(文字列)型

グローバル変数

コード書いてる途中にグローバルな変数が欲しいなと思った時,最初の方の行に戻って宣言...の必要もないです.
varをつけずにその場で新しい変数名書いて代入でも何でもしましょう.勝手にグローバルになります.

{ // 何かの関数とかの中
    var a = 1; // ローカル
    b = 1; // グローバル
}
console.log(a); // undefined
console.log(b); // 1

関数の基本的な宣言

関数宣言の基本はfunction

function test(n){
    return n*5;
}
console.log(test(3)); // 15

配列操作

これはそこまで珍しいものではないです.
ただ普通にC言語とかを使うよりは簡単に色々できます.
最近よく使うのは要素の頭と末尾に対する操作です.

var array = []; // 空の配列の宣言
var array1 = [1, 2, 3, 4]; // 4つの要素を持った配列宣言
array1.pop(); // 配列の末尾を削除します -> [1, 2, 3]
array1.push(5); // 配列の末尾に追加します -> [1, 2, 3, 5]
array1.shift(); // 配列の先頭を削除します -> [2, 3, 5]
array1.unshift(6); // 配列の先頭に追加します -> [6, 2, 3, 5]

連想配列も使えたりしますが割愛します.

関数のちょっと不思議な操作

JavaScriptさんの関数はいろいろ特殊な操作ができます.
よく使うものを3つだけ抜粋して載せておきます.
この記述方法面白い!とかあったら別記事に載せると思います.

変数として扱う

関数を変数のように代入できます.
そうした場合,変数は関数の入れ物となります.

function test(n){return n*5;}
var a = test;
console.log(a(3)); // 15

var b = function(n){return 5;} // なんならこれでもいい

関数をその場で使い倒す

即時関数と呼ばれるものです.
作った関数をその場で一度だけ実行します.

(function(){
    console.log('test');
})();
// test

コールバック関数をその場で記述

コールバック関数を宣言するまでもなく,その場で引数として入れることができます.

function func(n, callback){
    var a = callback(n);
}
console.log(func(5, function(n){
    return n*n;
}));
// 25

文字列をJavaScriptのコードとして実行

私はほとんど使いませんが一番なんでもできそうって感じのものです.
eval関数を使います.文字列がその場(そのスコープ内かつ呼び出し元の権限)で実行されるため細心の注意を払って使いましょう.

var x = 5;
var y = 10;
var z = 3;
eval('z = x + y;');
console.log(z); // 15

セミコロンの有無

実はJavaScriptさん,セミコロンがあってもなくても動きます.
私は最初つけるものだと思ってたので当たり前のようにつけてますが,うっかり忘れてしまってもエラーも警告も出ずに普通に実行してくれます.
JavaScriptでのセミコロンの存在意義ってなんなんですかね...

Node.jsとは

ようやく本題のNode.jsです.
Node.jsはサーバーサイドJavaScript環境です.
もともとWebブラウザ上,つまりクライアントサイドで動いてたJavaScriptをサーバーサイドで動くようにするんです.
私もソケット通信とかしようとした時に存在を知ったんですが,Node.jsを使うとほとんどJavaScriptだけで書けちゃったりします.

また,このNode.js,コマンドライン上で動かせます.
Python感覚でほいほいJavaScriptのコードが実行できます.
そのおかげか調べてみると,Webだとか通信だとかと一切関係ない使い方してる人がいっぱいいます.私もそのうちの一人です.

さらにモジュールも豊富です.
オープンソースなのでいろんなモジュールがあるんですが,このモジュールの幅広さがすごいです. この言語のこのモジュールいいよなーって思ったら,[node (モジュール名)]で検索かけてみましょう.結構それっぽいモジュールがヒットします.
また,この言語のこの機能(構文)いいよなーってなったときはだいたいJavaScriptの記述法で代用できます.

まとめ

もともと結構何でもありだったJavaScriptが,Node.jsを使うことでさらに何でもありになります.
フロントエンド,バックエンド共にJavaScriptにすればデータの受け渡しもスムーズにいきそうですね.
ただ,何でもありすぎて人のコードを読む難易度は高い気がします.知らない記法とかいっぱい出てきますし.

私はそんなJavaScriptの特徴的過ぎる記法が好きなので,よくJavaScriptで何でもしようとします.
共感してもらえたことはないです.