美大生がプログラミングした時に混乱する事まとめ

ずっと下書きで塩漬けになっていたのですが、埒が明かないので公開してしまいます。不完全な記事であることをお許し下さい

#概要
現美大生の執筆者とその知り合いがプログラミングでよく分からなかった事、うまくいかない事、理解が追いつかない事を纏めてそれらを解決する糸口を書き並べたものです

例として出すプログラムは断りがない限り全て`processing`で記述されています。マイナーなやつですいません。これくらいしかまともに使えなくて…
時々pythonが混ざります。間違ったところはガンガン指摘して下さい


##00.目当ての項目探すのだるいよ！
もしあなたがパソコンのでこの記事を見ているなら、`ctrl`キーを押しながら`F`を押してみてください
![image.png](https://qiita-image-store.s3.amazonaws.com/0/159270/ba2faf9b-4ef1-2f6f-c74b-0ca3ff97ebf4.png)
こういう↑文字を記入できそうなものが端っこに出てきます
ここに探したい文字を記入して`Enter`キーをカチカチ押していくとページ内をガガッと検索して一致する文字を見つけたら教えてくれます。

スマホでページ内検索する場合はこちらを参考にしてください。
http://menulist.mb.softbank.jp/feature_20151130/

#0.そもそもプログラムってどの順番で動くのよ
基本は上から下に一行ずつ動きます。

ただし、プログラムの中にはワープ機能やジャンプ機能を持つものがあるので、これがややこしくなる原因ではないかと思います。どこにジャンプするかが分かれば怖くないかと思います→参考：関数、if、for


#この一行が謎

###エラーメッセージが読めないよ
エラーメッセージをコピペして検索して下さい
特に単語の意味を辞書やネットの辞書で調べると段々意味がわかってくる、と思います

よくあるエラーの文
>Unexpected token 予期しない文字や記号
NullPointer Exception　ぬるぽ
~~ does not exist 　~~が存在しません
Syntax Error 構文エラー

#この単語とか記号は何？

##変数とか引数の違いが謎

◯数でよく分からないやつと言うと変数、引数、関数あたりでしょうか。
使い所をコードで示すと

```
void 関数（int 引数){
 int 変数 = 2;
 変数 += 引数;
 print (変数);
return 戻り値;
}

関数(引数);
```

こんな感じです
`関数`(function)は一個以上の命令たちをワンパックに纏めて置いといたやつです。
必要な時に関数の名前を呼んで実行します。同じ様な事をいろんな場面でやらせたい時や、プログラムの流れをスッキリさせるためなどなどに使います。便利です。

次の`引数`(argument)は関数を使う時に、関数側に渡す値のことです。
例えば`print("ごはん");`の`"ごはん"`が引数に当たります。
プリントしたい文字を()の中に入れてprint関数に引き渡している、ということです。

`変数`(variable)は一番良く使うであろう概念です
`int a =0;` の `a`が変数にあたります。
中身を書き換えられる≒変化できる物ということです。
箱概念に例えられることもあります
変数に対立する概念として`定数`がありますがこっちはあまり耳にしないと思います。定数とは定まった数、1とか420とか、特定の値を持った数のことを指すそうです

##a = a+1 って矛盾してない？
それは算数のイコールとは別人です。代入と言います
`A という変数に = この値を入れます→158`
と言う意味です。
a= a+1 とはaに1を足した数をaに代入することになるので、aの値を1増やすと言えます

##a++; a+=5;ってどういうこと？
演算子には特別な書き方があります。例外みたいな。プログラムを書く人は省略が好きなのでこういう書き方もあるわけです

a++,b—- のように書くとそれぞれ「aの値を1増やす」「bの値を1減らす」という意味になります。b=b-1と同じですが前者の方が短くてラク。

a+=5はa=a+5と同じです。左辺の変数aに何かを足したり引いたりする時はこの書き方が使えます。同様に
b-=99 b=b-99
g/=6 g=g/6
k*=0.6 k=k*0.6 
右と左の式は同じ意味を持ちます

##=がイコールじゃないならイコールはどうやって書くの？
等号の時は==と書きます

日本語で書くなら
```
A=4;かつ
B=4;のとき
A==B が成り立つ
```
って感じで==は条件式に使います

####条件式 is 何
ざっくり言うと二つのものを比べることです。比べた結果、条件式と実態が合っていればtrue、違うならfalseということになります

\> 超過
< 未満
<= 以下
\>= 以上
!= 同じではない
== 同じである

この六種類+αが使えます

```pde:条件式
a=3;
b=7;
if (a > b){
   a +=6
}
```
この場合a>bは成り立たないのでif文の中身は実行されません。

→if elseif else の差

###if elseif else の差
全部分岐を司る命令ですが使いどころが違います
使う順番は
if>else if >else って感じですが全部を使う必要はありません。

```:分岐1個
if(1>7){
  実行文();
}
//ifの条件を満たさなかったときは何もしません
``` 

```:分岐1個だけど実行文が2つ
if (a>=b){
  実行文();
}else{ 
　//ifの条件を満たさなかったときにelseの中身を実行します
　実行文2();
}
```

```:分岐条件たくさん
if(条件1){
  　条件が当たってる時に実行するやつ();
}else if(条件2){
　　さっきの条件は当たらなかったけど条件2に当てはまる時実行();
}else if(条件3){
　条件1と2は当たらなかったけど条件3に当てはまる時実行();
}else{
　　条件1,2,3全部駄目だったら問答無用でこれを実行する();
}
```

else はどの条件にも当てはまらなかった、という条件を満たした時に実行されるので条件文を書くところがありません.最後の受け皿的立ち位置です

###for とwhile?
for whileは同じ繰り返し命令だけどちょっと違う

```py3:pythonの文法
for i in range(4):
    print(i)
```
```py3:実行結果
0
1
2
3
``` 
```py3:pythonの文法
while i < 10:
  　print(i)
    i = i+1
```

###for文とかif文の時にやってる文のはじめに空白入れるのって必ずやるの？
使ってる言語にもよりますけど｛｝こういうカッコで命令文を囲んでる言語なら実は必要なかったりします。でもめちゃくちゃ見づらくなるので大体は文頭に空白を入れるんですね。この空白を「インデント」と言ったりします。よく聞くので覚えときましょう

pythonの場合は文頭のインデント、つまり空白でどこからどこまでが中身の命令文なのか判断してるので必須です

```py:見づらい
if(i!=0){
test = test*50+1;
if(neko>2){
inu = function(neko)+shippo;
string deta = tori(0,sakana,0.4,"kaeru");
maguro = deta;
}
i=0;
}
```

```py:見えやすい
if(i!=0){
   test = test*50+1;
   if(neko>2){
      inu = function(neko)+shippo;
      string deta = tori(0,sakana,0.4,"kaeru");
      maguro = deta;
   }
   i=0;
}
//どこからどこまでがif文の範囲なのかぱっと見でわかる
```


###コードが変な時、どこが変なのか分からない
エラーがでた！という時、「ここで引っかかって止まったんすけど」とハイライトで教えてくれることが多々あります。ありますが、実際のエラーはそこじゃない場合があります。このちょっとずれたエラー指摘を見抜くのは慣れと少しの知識が必要なのですが、それを言語化できるほど私は熟達していないのでごくかんたんにコツを書きます。

- まずエラーが有ると指摘された行をよく見て間違いがないか確認する
- エラーがないようなら前の行を2,3行分見て間違いがないか確認する

これだけでも気休めにはなるでしょう。
ちなみに後ろの行は見る必要がないかなと思います。エラーが出た時点でプログラムは実行をやめてしまうので。



##楽をするのが一番優先
美大生というのは繰り返しを苦としない人が多い、と聞いたことがあります。おなじようなことを実行するコードを延々とコピペしてられる、的な。その点コンピュータは同じような命令を延々と繰り返すことに長けています（しかも1秒に何億回と繰り返せるポテンシャルを持っている）。この性能は人間なんかとは比べ物にならないわけです。
同じようなことをたくさん繰り返す命令はうまいことコンピュータに効率よくやらせてしまいましょう

###おまけ「The Zen of Python」
pythonの哲学が19行ほどの詩としてまとめられています。pythonユーザーに限らずプログラムを書く上で役に立つ考えがここにまとまっているので読んでみてください
https://www.python.org/dev/peps/pep-0020/

日本語訳を最初から見るのはおすすめしませんが、この詩について解説をした記事があるので紹介します（日本語）
https://qiita.com/IshitaTakeshi/items/e4145921c8dbf7ba57ef#%E3%82%AA%E3%83%A9%E3%83%B3%E3%83%80%E4%BA%BA%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6