日本語で始めるプログラミング

　プログラミングに興味があるけど、JavaやPython、C言語などをいきなり勉強するのはハードルが高いと思っている人やプログラミングって実際何をやっているの？って人向けのお話

# プログラミングは敷居が高い
　何事においても未経験や初心者にとって一番初めの壁は始めること。プログラミング未経験者からすれば、プログラムは英数字の文字列が羅列されており、とっつきにくいと感じたり、そもそも何が書かれていて、何をしているのかわからない状態なので余計にプログラミングを始めにくい。

# 日本のプログラミング教育
　2021年現在、小学校、中学校でのプログラミング教育での主流はビジュアル型プログラミング言語であるが、実際に動いているアプリケーションの大半はJavaなどのテキスト型プログラミング言語が使用されている。「プログラミングの勉強」といえば、テキスト型プログラミング言語を勉強することが一般的であるが、いきなりJavaなどを勉強するのはハードルが高いという人やプログラミングって実際何をやっているのか知りたい人に向いているのが日本語プログラム言語である。

# 日本語プログラミング言語
　日本語プログラミング言語とは、日本語でプログラミングを行えるプログラミング言語のことであり、プログラムを見たときに直観的に何をやっているのかわかりやすく、初心者でもプログラミングの基礎が学習しやすい。本記事では日本語プログラミング言語としてなでしこを使っていく。

# なでしこを使ってみる
　なでしこには「なでしこv1」と「なでしこv3」があり、これらは用途が異なる。用途については以下の通り。

> なでしこv1 - Windows処理に特化
> なでしこv1は、Winowsに特化しています。Windows上でバッチ処理を記述したり、アプリを作ったりするのに、とても便利です。
> ～中略～
> なでしこv3 - Webブラウザやマルチプラットフォームに対応
> これに対して、なでしこv3は、複数のOSやWebブラウザに対応しているため、汎用性の高いプログラムを記述できます。PC/タブレット/スマートフォンと端末を問わず動かすことができます。
> また、なでしこv3のPC版は、Windows/macOS/Linuxとマルチプラットフォームに対応しています。

> 引用（https://nadesi.com/top/index.php?%E3%81%AA%E3%81%9Cv1%E3%81%A8v3%E3%81%8C%E3%81%82%E3%82%8B%E3%81%AE%3F）

### Hello Worldまでの道のり
　大抵の場合、プログラミングを扱う技術書やWebサイトにおいて一番初めに登場するプログラムといえば「Hello World」である。「Hello World」とは、画面上に「Hello World」やそれに類する文字列を表示させる単純なプログラムであるが、「Hello World」を実行するまでには様々は準備が必要となる。なお、なでしこのプログラム例だけでなく、世界で広く使用されているJavaのプログラム例も記載する。

#### Javaの場合
1. JDKのダウンロードとインストール
2. 環境変数の変更
3. 必要に応じて統合開発環境(IDE)またはテキストエディタのダウンロードとインストール
4. プログラミング
5. コンパイル
6. プログラムの実行

***プログラム例***

~~~java
public class Helloworld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
~~~

「Hello World」と表示させるために「public class ~」や「public static ~」といったクラスやメソッドについての知識が必要となってくる。また、実際に「Hello world」と表示させている「System.out.println」についても、「java.langパッケージに含まれるSystemクラスの～」といった知識も必要となってくる。

#### なでしこの場合
1. なでしこのダウンロードとインストール（※１）
2. プログラミング
3. プログラムの実行

※１：なでしこv3の場合、なでしこv3Web簡易エディタが用意されているので、ダウンロードは必須ではない。

***プログラム例***

~~~なでしこ
「Hello World」と表示
~~~

使用できる命令（プログラム例の「表示」の部分）はあらかじめ用意された命令しか使用できないが、コードから実行結果がイメージしやすいので、他のプログラム言語より直観的にプログラミングができる。

### 変数と条件分岐
- 変数とは数値や文字列といったデータを保持することができる記憶域のこと
- 条件分岐とは特定の条件を指定し、その条件に一致または、不一致であるかを判定し、実行する処理を分岐させるコードのこと

以下に変数xに1を代入し、xの値が1と一致するか否かで実行される処理を分岐させるプログラム例を記述する。

#### Javaの場合
***プログラム例***

~~~ java
public class Sample {
    public static void main(String[] args) {
        int x = 1;
        if (x == 1) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
    }
}
~~~

#### なでしこの場合
***プログラム例***

~~~
xは1
もし、xが1ならば
    Yesと表示
違えば
    Noと表示
ここまで
~~~

　なでしこのコードは実行したい処理をそのまま日本語にしたイメージとなっている。なお、なでしこの場合、変数の代入方法はプログラム例のコード以外にも「x = 1」「1をxに代入」といったコードがある。

### ループ処理
- ループ処理とは条件式に当てはまる場合や指定した回数分だけ処理を繰り返し実行させるコードのこと

以下に変数iに代入された値が5以下の場合、iを表示後、iに1を加算する処理のプログラム例を記述する。

#### Javaの場合
***プログラム例***

~~~ java
public class Sample {
    public static void main(String[] args) {
        int i = 1;
        while (i <= 5) {
            System.out.println(i);
            i++;
        }
    }
}
~~~

#### なでしこの場合
***プログラム例***

~~~ なでしこ
iは1
iが5以下の間
　　iを表示
　　i=i+1
ここまで
~~~

ループ処理についても実行したい処理をそのまま日本語でコーディングしたイメージとなっている。ループ処理に関してはJavaもなでしこも様々な構文が存在するので一概に単純比較はできないが、上記プログラム例であれば、while文でどのような処理が行われているのかわかりやすい。

# 応用編
変数、条件分岐、ループ処理を使った電卓。なでしこv1で実行することを想定したコーディング内容となってます。なお、Javaを使った電卓のプログラム例については様々な技術書やサイトで取り扱われているので、ここでは割愛します。

***プログラム例***

~~~なでしこ
計算フラグ=yes
(計算フラグ=yes)の間
	「値1は？」と尋ねて、値1に代入
	「演算子(+,-,*,/)は?」と尋ねて、演算子に代入
	「値2は？」と尋ねて、値2に代入

	(値1が数字か判定)を判定結果1に代入
	(値2が数字か判定)を判定結果2に代入

	もし、判定結果1が0または判定結果2が0ならば
	  「値1および値2には数値を入れてください」と表示
	  5秒待つ
	  おわり
	ここまで

	もし、演算子が「+」ならば
	    答えは値1+値2
	違えば、もし、演算子が「-」ならば
	    答えは値1-値2
	違えば、もし、演算子が「*」ならば
	    答えは値1*値2
	違えば、もし、演算子が「/」ならば
	    答えは値1/値2
	違えば、
	    「演算子には+,-,*,/のいずれかを入力してください」と表示
	     5秒待つ
	     おわり
	ここまで

	答えを表示

	「続けますか(yes/no)？」と尋ねて、計算フラグに代入
	もし、計算フラグ＝noならば、抜ける。
ここまで
~~~

処理結果については、実際に実行してみてください。

# まとめ
　日本語プログラミング言語は他のプログラミング言語に比べて始めやすいので、いまからプログラミングを勉強しようとしている人におすすめ。また、すでにプログラミングができる人がプログラミング初心者に処理の動きの説明に使えるので、後進教育の参考にもなる。あらかじめ日本語プログラミング言語でプログラミングをしておけば、他のプログラミング言語を勉強し始めたときに処理がイメージしやすいのでプログラミングを始める第一歩に。

# 参考
- [文部科学省 教育の情報化の推進](https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1369613.htm)
- [なでしこ:日本語プログラミング言語](https://nadesi.com/top/)