プログラミング作法02
式と文編
- インデントしろよ
綺麗にインデントしなくても確かに動くけど構造が把握しにくいよ
構造が把握できればエラーも減るしメンテしやすいよ
- 自然な式を使ってね
式は音読するつもりで書いてね
if(!(age > adult) || !(age =< teen))...
わざわざ否定する必要ないよね、関係演算子ひっくり返せば良いよね
- 括弧を使って曖昧さを回避しようね
括弧を使って意図を明確にしてね
いや別にいらないっちゃいらないしなくても動くけど害があるわけじゃないし
関係演算子(<とか>とか==とか)は論理演算子(&&とか||とか)より優先度が高いから変なとこでミスる可能性減るよ
leap_yaer = y % 4 == 0 && y % 100 != 0 || y % 400 ==0;
これは括弧を使わなくても問題ないけど
leap_yaer = ((y%4) == 0 && (y%100) != 0) || ((y%400) == 0);
の方がまとまってるし優先度の高い式が分かりやすいね
空白を詰めると見やすいこともあるよ
- 複雑な式は分割してね
便利な演算子とか構文がいっぱいあるからまとめて書けちゃうよね。わかる。
でも分轄した方が分かりやすいよ
演算子で比較しまくるぐらいならifとかwhile使ってスッキリ書こうね
- 明快に書いてね
頭捻って考えつかないような処理を短いコードでやってんね。すごい。
でもそれ他の人も見るんだけど大丈夫なん?
『明快さ = 短さ』ではないよ
明快なコードでも長くなることはあるから自信持とうね
- 副作用に気をつけてね
花粉症じゃないから知らないけど花粉症の薬って飲むと眠くなるらしいね、なんでか知らんけど。
便利な機能には副作用もあるよ、例としてインクリメント・デクリメントとか。
よく使うよね。
array[ i++ ] = i ;
i=3だったら配列に代入される数字はなんだろうね?
とにかく一定でない結果を返す可能性が高いよ
インクリメント・デクリメントは値を返すのと書き換えをするからエラーの元になりやすいよ
プログラミング作法01
名前編
- ローカルは短い名前でも良いよ
どうせローカルの中でしか使わないんだから助長な名前はつけなくて良いよ
ループインデックスもjとかiで良いよ
- 文脈から分かりそうな変数名はつけなくて良いよ
class Moyashi のオブジェクトを作成するんだったらわざわざ int = ageMoyashi とか定義しなくて良いよ
class Moyashi{
int age_Moyashi = 27;
}
classにMoyashiって書いてあるんだから助長だよ
名札つけてる人に「名前は?」って毎回聞かないよね。
- 関数には能動的な名前を付けた方が良いよ
『能動的=他からの働きかけがなくても、自分から進んで行うさま』
動詞+名詞がオススメだよ。getName()みたいな感じ。分かりやすいっしょ?
- 真偽値booleanが返ってくる関数はどの値が判定されるのか分かりやすくしよう
if(checkAge(27))....だと「ageをチェックして返ってくるのはtrue?false?」ってなるけど
if(isAge(27))....なら「ageが27ならtrueだな」と直感で分かりやすいね
「チェックしてくるは」「どっちだろう・・・」より
「27ならOK!!!!」「はい!!!!」の方が良いよね
クソリプbotを作ろう<Twitterで自分のタイムラインを取得する>
経緯
「自分が面白いと思ったものを作った方が良いよ」僕「中々思いつかないんですよね〜〜」「クソリプAIとか」僕「クソおもしろそう」
— Virtualもやし (@moyashiZZ) 2018年9月21日
『クソリプAIとクソリプAIを戦わせて最強のクソリプAIを作り上げる』という貞子 vs 伽椰子で聞いたような言葉にいたく感銘を受けました
ぶっちゃけ何番煎じなんそれ?というネタではある
というか某氏が既に作っていて放流したまま放置しておりどこかでクソリプを送りあっているという
ただ飽きっぽい自分の中でおもしろそうだなという気持ちがかなり沸き起こってるのとn番煎じという事は情報が転がってる確率が高いので比較的組みやすいのでは?と安易に考えている
まずはAPIの使い方を覚えるために色々触ってみるのだ
TwitterAPIでタイムラインを取得する
使用言語はPython
Pythonの知識はProgateを一通りとUdemyで画像判定AI(講師のコードを写経)を作った程度の知識
TwitterAPIのアクセスキーは省略
というか以前JavaでTwitterAPI使ってみようと既に作成してた
Javaで同じことやるのめちゃくちゃめんどくさいし情報少なかった
config.py
CONSUMER_KEY = "" CONSUMER_SECRET = "" ACCESS_TOKEN = "" ACCESS_TOKEN_SECRET = ""
アクセスキーの設定
アクセスキーとか見られたらマズいものはファイルを分けてから使いたい場所でimportしてやれば良いんですね。
なるほど
getTimelines.py
#標準JSONモジュールとconfig.pyの読み込み import json, config #OAuthのライブラリの読み込み from requests_oauthlib import OAuth1Session CK = config.CONSUMER_KEY CS = config.CONSUMER_SECRET AT = config.ACCESS_TOKEN ATS = config.ACCESS_TOKEN_SECRET #認証処理 twitter = OAuth1Session(CK, CS, AT, ATS) #タイムライン取得エンドポイント url = "https://api.twitter.com/1.1/statuses/user_timeline.json" #取得数 params = {'count' : 5} res = twitter.get(url, params = params) #正常通信出来た場合 if res.status_code == 200: #レスポンスからタイムラインリストを取得 timelines = json.loads(res.text) #タイムラインリストをループ処理 for line in timelines: print(line['user']['name'] + '::' + line['text']) print(line['created_at']) print('*******************************************') #正常通信できなかった場合 else: print("Failed. : %d" % res.status_code)
TwitterはOAuth認証とやらが必要らしく最初にrequests_oauthlibのOAuth1Sessionをimportしている
んでOAuthってなんぞという話なんですが
ユーザーがアクセス権限を承諾した証明書を発行するやつみたいな認識
そしてそれをうまいことやってくれるのがOAuth1Sessionなのかなぁと
多分Twitterで外部連携するときに○○に△△の許可を与えますか?とか出てくるヤツ
1.アプリがAPIへのアクセストークンをリクエスト
2.Twitterがユーザーに権限を与えるか聞く
3.許可
4.アクセストークン発行
5.アプリがAPIを利用可に
1と4をやってくれるのがOAuth1Sessionです。たぶん。
最後にコマンドプロンプトで実行
python getTimelines.py
出たーーーーーーーー!!!!!
取り敢えずTLが取得できたので今日はここまで
先は長い
作業用BGM