日々、徒然プログラミング。

都内のIT系専門学校に通う、一人暮らし女子学生chocoffeeの、 日々の気づきと学び、たまにほっこりを綴るブログ。

エンジニアのみなさま、エンジニアの卵のみなさま、IT業界のみなさまが
わたしの「チームってなんだ?」というぼやきに反応してくださることを祈って。

2016年06月

こんにちは!
西新宿から大久保までノンストップウォーキングしてお眠なちょこひです。

例えるなら、小学生の頃の2コマ続きの水泳授業の後のような、心地よい眠気。
現実は豪雨と強風の中ビッチョビチョになりながら歩いただけです。
今日も(いつも通り)たくさん眠れそう。


三項演算子って?

今日は春から学び始めたPHPの三項演算子の話をするためだけに
眠い目をこすりながら執筆しています。

三項演算子は、プログラミングの世界では有名ですよね。
条件分岐の手法でよく用いられています。

知らない方のためにちょこっと説明してみます。

「Aさんの名前が太郎くんならTaro、次郎くんならJiro、それ以外ならSaburoと出力する」
というプログラミングを組むとしましょう。

Javaで考えてみると、以下のようになります。

16/06/14追記
Javaで文字列の==はよくないんでした・・・epuals()ですね。
一応動くは動くのですが、あとから修正するかもしれません。



if(aName == "太郎") {			//もし太郎だったら
	System.out.print("Taro");	//Taroと出力
} else if(aName == "次郎") {		//もし次郎だったら
	System.out.print("Jiro");	//Jiroと出力
} else {				//それ以外は
	System.out.print("Saburo");	//Saburoと出力
} 



プログラミングを全く知らない方でも、
なんとなく仕組みがわかるのではないでしょうか。


イコールが2つ続いていますが、これは情報の世界では等号として扱われています


(`・д・´) 「じゃあイコール1つはなんなんだよ!」

イコール一つの場合は、
右辺のものを左辺のものに代入」という意味になります。
等しくありません。代入です。


以下をご覧ください。 
number = number + 1;	


数学者「等しくねえよなーに言ってんだこいつ」
プログラマ「numberは1増えるのか〜 numberが1なら2になるな


こんな感じ。


プログラマ「number って2回書くのだるい…」
で、生まれたのが以下の書き方。


number += 1;	


どんどん短くなってますね。
これも、numberに1を足したものをnumberに代入する、という意味です。


話が逸れましたが、つまり何が言いたいのかっていうと
プログラマはとおおおおおおおおってもめんどくさがりなので
何でもかんでも短く書きたがるんです。


最初の太郎さんたちのコードを見てみましょう。

if(aName == "太郎") {			//もし太郎だったら
	System.out.print("Taro");	//Taroと出力
} else if(aName == "次郎") {		//もし次郎だったら
	System.out.print("Jiro");	//Jiroと出力
} else {				//それ以外は
	System.out.print("Saburo");	//Saburoと出力
} 

プログラマ「なげーよ!!!(゚Д゚)ゴルァ!!」


もちろん、もっと短く書く方法が存在します。 
その一つが三項演算子です。


ふー!導入ながかったあ!!!

 
三項演算子はすごい


ひっぱりましたが、実際に三項演算子を使ってみましょう。

if(aName == "太郎") {			//もし太郎だったら
	System.out.print("Taro");	//Taroと出力
} else if(aName == "次郎") {		//もし次郎だったら
	System.out.print("Jiro");	//Jiroと出力
} else {				//それ以外は
	System.out.print("Saburo");	//Saburoと出力
} 

これが、 
String name = aName == "太郎" ? "Taro" : aName == "次郎" ? "Jiro" : "Saburo";	//条件分岐
System.out.print(name);								//出力命令

こうなる。

('A`) 「わかんねえ」

こちらも解説してみます。 

Stringは、nameには文字列が入るよ!と指定しています。あんま気にしなくていいです。

aName == "太郎" の部分は、イコール2つなので「Aさんの名前は太郎だ!」と言ってます。
これは正しいor誤り の2パターンになりますね。
正しい場合は、?のすぐ後の"Taro"がnameに代入されます。
誤りの場合は、:の後に進みます

すると、「Aさんの名前は次郎だ!」と言ってます。これも2パターンになりますね。
正しい場合は、?のすぐ後の"Jiro"がnameに代入され、
誤りの場合は"Saburo"が代入されます。

やってることは同じなのに、書く量が全然違いますね。
三項演算子はプログラマにモッテモテ。
これが、三項演算子はすごい理由です。

まとめると、

example = a == b ? a : b;

aとbが等しいならexampleにはaが、
等しくないならexampleにはbが代入される、
これが三項演算子です。

 
PHPの三項演算子

では、PHPでも同じ三項演算子を書いてみましょう。
ちょっとだけ書式が違うのですが、書いてあることは一緒です。

$name = $aName == "太郎" ? "Taro" : $aName == "次郎" ? "Jiro" : "Saburo";
echo $name;

書けた。
echoは出力命令です。

さて、aNameを太郎にして動かしてみると・・・


(`・д・´) 「Jiroになった」


・・・次郎だと?


 (`・д・´) 「Jiroになった」


・・・花子なら?


  (`・д・´) 「Saburoになった」



花子がSaburoになったことは放っておいて、 
太郎くん消失事件が発生しました。

太郎くんはどこに行ったのか?
もしかしてPHPは太郎くんに親を殺された恨みがあるのか?
もしかしてPHPは太郎の文字列に反応して正常に動かなくなるバグがあるのか?
もしかしてPHPは問答無用で私のコードを受け付けないのか?
もしかしてPHPは三項演算子使えない?


(・∀・)「仕様がちがうだけやで」 


Javaを始めとする他の言語の大多数は、
三項演算子の動きは同じです。
太郎くんたちの例で言うなら、nameはTaro、Jiro、Saburoの3通りになります。

PHPは、それがちょっと違って、
nameはJiroとSaburoの2通りになってしまうようで。 

具体的にいうと、
$aName == "太郎" 〜 == "次郎"
の部分が正しい場合は"Jiro"に、誤りの場合は"Saburo"になる、らしい。

$name = ($aName == "太郎" ? "Taro" : ($aName == "次郎" ? "Jiro" : "Saburo"));
echo $name;

かっこによって優先順位を変えてあげると、
ちゃんと太郎くんは戻ってきてくれました。
よかったね、太郎くん。


・・・花子ちゃんがSaburoになってる問題は知りません。
わたしわるくない。


まとめ


さて、いつになく真面目な文になりました。
眠い時の方が真面目にかける仕様なわたし。意味がわかりません。

一応PHPの仕様を読んでみたのですが、
そもそもPHPでは三項演算子の入れ子(太郎くんたちのまさにあれ)は
推奨されていないようです。

確かに条件分岐が多いなら他の書き方を使ったほうが
可読性はあるかもしれませんね。

この問題に直面した時はPHPだけ仕様が違うことに
全く解せていませんでした。
激おこぷんぷんまるでした(古い)

いっこいっこ確認しながら勉強を進めていこうと思います。


とりあえず今日は眠い!お家帰って寝るんだー!!!



ちょこひ 

こんにちは!
腰痛と肩こりがMaxなちょこひです。

作業時間が長かったここ最近。
マッサージ行きたい。

 
Twitterクライアント作れた!!

Swiftの授業課題で、
Twitterクライアントアプリを作成して発表会をする
というものが出ました。

期限は10日間。


・・・期限は、10日間。


(((( ;゚д゚)))



頭を抱える友達、瞳孔が開いてる友達、
逆に開き直って諦める友達。

わたしは瞳孔が開いたタイプ。


やるっきゃねえわな!?!?

野球部もびっくりのど根性精神、解禁です。 


 
企画

授業では、

・タイムラインの取得
・新規ツイート方法
・RT方法

あたりを扱いました。jsonの受け取り方・投げ方は一通りわかっている状態ですね。
ここから、自分なりに色々考えて機能追加していくわけです。

課題ではありますが、
どうせやるなら自分の好き勝手やりたい!」と思ったので、
好き勝手やる事にしました。

普段は公式のアプリを使っているのですが
不満点がぎょーさんあるんです。

・新規投稿が右上にある問題
 →iPhone6Sを使っているせいか指が届かなくて困る
・検索が投稿の隣にある問題
 →普段検索は滅多に使わないのに投稿と間違えて押す事が多くてストレス
・TLでのリプライ表示邪魔すぎ問題
 →TLは時間通りに並んでいた方が見やすい
・背景真っ白固定問題
 →黒背景に白文字の方が見やすいタイプなので、白背景は辛い
・自分のふぁぼ一覧遠い問題
 →自分がいいねしたものをよく見返すけど、そこまでが遠い
・ストリーミング非対応問題


などなど。

自力で出来る部分に関しては
自分の理想通りに作ってやろうと決めました。

・画面下半分のみで操作可能なUI
・黒背景
・紫が好きだから紫入れる
・いいねしたTLは1タップでアクセスできるようにする


これらを実現してみました。



ひとまず形にしたアプリ


01

アカウントを選択して、


07


UITabBarControllerに遷移します。
左から タイムライン、メンション、新規投稿、いいねしたタイムライン、現在のアカウント情報
が表示されます。

一度にとってくるツイートは20件で、
一番下の行が出てきたときに続きを読み込む様にしています(たまにバグる、なんでえ)

45


新規投稿はこんな感じ。
画像も1枚なら添付できます。


58

ツイート詳細画面。
リプライ、RT、ふぁぼ、ツイ消し機能がついています。
RTとふぁぼの数も表示されます。

鍵垢の場合はRTできないとか、
自分以外のツイートの削除もできないとか、
その辺も頑張っています。本当に頑張った・・・(遠い目)



ソースコードの話


まだ完成品ではありませんが、
現段階でのソースコードはGitHubにあげています。

GitHubを見る

どう実装したのかは見ていただければお分かりいただけるかと思いますし、
長くなってしまうのもアレなので
実装する上で大変だった事を書いていこうと思います。

いや本当に・・・大変だったんだ・・・

写真 2016-05-28 13 44 12

ほら、大変そうでしょ?(´;ω;`)


TableViewの最終行が表示されたら追加読み込みapiを投げていたんですが
その判定がおかしかったようで。
HTTPエラーの大安売り。しかも429。

これ、発表会の2日前の出来事。
あと2日しかないのにこれ。

デバッグして、429出て、デバッグして、429でて、アカウント凍結されて、
デバッグして、429出て、デバッグして、429でて、またアカウント凍結されて、
半泣きになって、デバッグして、デバッグして、デバッグデバッグでばでばでばでばbでbだえbdw

という週末を過ごしました。

発表会30分前に思いついて使うメソッドを変えたら
すっきり解決しやがったので、まあ、うん、よし。

 
今後の計画


10日間という短い期限なのもあって、
クライアントとして必要不可欠な機能の幾つかを
まだ実装できていません。

・フォロー機能
・フォロワー / フォローの人一覧
・リスト機能
・プロフィール編集
・DM機能

以上は手付かずな状態。
TLみてちょこっとつぶやくだけ、のようなアプリどまりです。 


これでやめるわけにいかんよなあ!?!?(ど根性精神2回目)


と、いうことで夏休み中を目処に色々機能を追加して 、
AppStoreリリースを目指します。

リジェクトされても、とにかく完成させる。

GooglePlayにはリリース経験あるので、
AppStoreにも出しておきたい!


つきましては、アイコンとLaunchScreenの作成に協力してくださる
デザイナーさんを募集します。


「やってやらんでもないぜ」って方は、ご連絡ください。



まとめ
 

今回学んだ事

・継承とプロトコルの偉大さ
・jsonすげえ
・apiのドキュメントちゃんと読むことの大事さ
・自分の英語力の低下具合 
・デバッグは腰にくる
・HTTP429エラーの恐怖 

HTTP429エラーと早く絶交できるように
続きもがんばっていきます。

寝不足が解消されない・・・



ちょこひ 

↑このページのトップヘ