【初心者向けプログラミング講座】美しいif文を書こう!【ひろはす】
HTML-код
- Опубликовано: 29 авг 2024
- 売れるゲームクリエイターを育成するオンラインスクール
「GC’sブートキャンプ」開校!
期間限定で超実践型オンラインセミナー無料公開中!
セミナー視聴で僕の電子書籍「超実践型インディーゲームクリエイターガイド」をプレゼント!
今すぐ公式LINEに登録しよう!👇
penguin-asp.co...
※スクールに関する質問は公式ラインにお願いします!
このチャンネルはゲーム業界歴約20年の私が、ゲームクリエイターになりたい人や個人でゲームを作っていきたい人、ゲーム会社に就職・転職したい人のために、開発・制作のノウハウや売上の伸ばし方、企画やプログラムのコツ、勉強法など様々な情報を語っていくチャンネルです。
チャンネル登録よろしくお願いします!
メインチャンネル
/ @hirohasu
サブチャンネル
/ @hirohasu2
ひろはすが弟にゲーム開発を教えるチャンネル
/ @kkgame
各種SNSもフォローよろしくお願いします!
【Twitter】
/ hirohasusan
【Instagram】
公式 / hirohasu_game
プライベート / hirohasusan
【TikTok】
vt.tiktok.com/...
■プロフィール
ファミコンのスーパーマリオブラザーズに出会いゲームクリエイターを目指し始める。
小学生から個人でゲーム開発を始める。
専門学校卒業後ゲーム会社に3Dグラフィックデザイナーとして就職。
10年間サラリーマンとしてゲームを作った後独立して再び個人でゲームを作り始める。
現在は趣味でゲームを作りながらゲームクリエイターになりたい人を応援するために各種SNSでノウハウを発信しています。
※記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。
#ひろはす #ゲーム開発 #ゲーム制作 #ゲームクリエイター
みんなリーダブルコード読もう
スパゲティコードに悩まされていたため、非常に助かります。
このearly returnとかガード節とか言われてるテクニック、不具合が出たときに必要以上にコードを追わなくていい点と、elseが必要になったときに迷いづらい点が非常に良い
私もearly return肯定派です。
想定している正常系でのreturnなら問題無いと思います。
ただ、インスタンスが無い等異常系のreturnの時に何のエラーログも無いままreturnしているプロジェクトの不具合修正に苦戦した事があるので、異常系のreturnをする場合はエラーログ等を出すようにしておいた方が将来的にみんな幸せになると思います。
これはめっちゃわかりやすい!
非常に助かりました!!
このコーナー続けて欲しい!
即リターンは個人なら良いけど、会社だと新人とかがコード読め無さすぎてリターン後に処理書いたりするからバグの温床になる(海外にソース渡したときもそう)。
アホみたいな話だけどガチで有る。やるなら先頭でエラー処理する時だけの方がいい
同意です
基本的に途中でのリターンはその後の処理が単純に不要と言える時に先頭部でですね。
または例の様なif文なら&で条件を纏める形で階層を減らすようにしてます。
20年以上前の装置の面倒も見る必要のある分野なので安全性の積み重ねの自己流です。
複雑なフラグ管理の場合には、テーブル化して参照ってのもありなんですよねぇ
参考になります〜🎉
自分で、まさに読みにくいif分を書いていて、読みにくいな~っと思っていました。
なるほど、とても読みやすいですね!実践していきます!!
普段はscriptを書くくらいでしたがとても勉強になりました……!
さっそくUnityのプログラムを書きかえました~すげぇ参考になる。。
素晴らしいコンセプトですね!if文の頻度は他と比べ物にならないですからね!
この書き方だと、後で条件を追加しても可読性が変わらないのが良いですね。
論理演算子で横に繋げるのはカッコよく見えますが、条件が増えるほど「これは一体何を判定したいんだ……?」と読みにくくなっていくという罠……
あとは、「isDead」という名前を付けてあげることで、「もし死んでいたら」と英文を読むようにコードを読めるという利点もありますね。
カッコを開けるんじゃなく
カッコを閉じるんですね!😮
結構使えそう!
早期return は読みやすいのもあるけど、エラー時に何もしないというのがはっきりわかるので理解しやすいですね...
他に人も書いてますが、update処理は生きてたら行うのが流れ的には美しいかも。
一応エンジニア歴40年のじじぃの意見です
出口が複数はダメだと思うけどなぁ
if分にコメントってもどうだかなぁ
そのかっこの書き方もしないなぁ
それを見やすいと思うのは時代の差なのかなぁ
&&を使ってはいけないんですか?
ラムダ式も見たいですー
久しぶりに覗いてみました。今回の動画良かったです。
正直ひろはすさんってあんまプログラミング得意じゃないのかと思ってました。
動画もゲームクリエイターの話とか売上る話とか、ゲームエンジンの利用法とか紹介とかそういうのばかりだったんで。
プロデューサーでもゲームデザイナーやクリエイターではあるわけですから、実際プログラミングしてるんは別の人かなとか。
unityでゲーム制作の講座見たいなら一から作りながら解説してる他のチャンネル見たほうが
ぜんぜん有意義だと思って、いつの間にか他のチャンネルに行ってました。
スクール開校されたんですね。
今後はプログラミング講座の動画を増やして欲しいです。そのほうが今よりも説得力もでると思います。
3:38 そこの関数名はIsDead じゃなくてIsAliveのように肯定的な単語にした方がいいと思いますよ
今回の使い方はearly returnとしてなので、「○んでたら終了する」というより「生存していなければ終了する」とした方が可読性上がりそうですね(from リーダブルコード)
P.S. 他のコメ読んだらすでに書かれていた…
うう、if・if else・else文のなかにさらにif・if else・else文が2、3階層ネストしてたプログラムの修正が必要になった時があって大変だっと記憶が w
if分を取っ払って全ての変数毎に取りうる状態を洗い出して、配列に突っ込んですべての組み合わせ網羅して、配列の何番目に該当するかで処理を切り替えるって感じに全面的に変更したような。
シーケンシャルに実行されるプログラムは楽でいいなぁ、HDLはコンカレントだからめんどくさい。
深いネストを避けるのはif文もあるあるですが、for文はもっと大事で、可読性以前に潜在的な性能バグとして大問題になる可能性があるので気をつけましょう。
3つのループをそれぞれ1000周回す時にもし①何も対処せず三重ループにしてしまうと10億回処理が走る。
②独立した3回のループなら処理数は3000回で済むし、どうしても処理的に無理で③二重までしか減らせないとなっても100.1万処理まで削減できる。
もし1回の処理が1ミリ秒だとして計算すると、①なら12日もかかってしまう。これが②なら3秒、妥協して③でも16分と大幅な性能改善が見込める。
ただ、上記の改修はそこそこ難易度が高く、万能の処方箋を出すのも難しいので「この深いネスト大丈夫かな?」と思ったらまずはコーディングスキル高い先輩に聞くのがオススメ。
ガード節って学校の教員とかには使っちゃダメっていう人が居るんですよね(ゲーム系にはいないのかも)
ダラダラ長くなりがちなプログラミング解説動画をこんなに短くピンポイントでとても実用的にまとめたのは凄い!
今後にめちゃめちゃ期待してます!!
if(!IsDead())
{
//処理
}
が個人的には可読性高くて好き
IsUpdatable()にしますね~
でもデバッグしずらくならないすかね。
リターン。
戦闘開始時に戻るあれか!?
最近始めた初心者なんですが条件を一つのかっこの中で&&でつなげるのはダメなんですか?
動くのは大前提として、
デバッグがしやすい、あとから見返しても読める、他人が読んでも読める
などの条件が揃ってれば、個人的にはいいと思いますよ
はえ〜 勉強になるわ サンガツ
if文は処理が1行でも必ず{}を付けるべきだと思ってたけどゲームのコードだと要らないんだね
ChatGPTに課金して、汚いプログラムをコピペして直してと言うだけでサクッと綺麗にしてくれるのでおすすめ
ソースコード整理は至上の喜び
とても参考になります!(悪い例の分岐書いちゃってた)
関数化とreturnと返り値をまだまだ使いこなせません💦
とりあえずreturn(返り値)は関数を呼び出された時に返す数値のことですね。
例(C言語(これはadd関数(足し算して計算結果を返す関数)を作ってみたやつ))
#include
int add(int a, int b);
int main(){
printf("1 + 1 = %d
", add(1, 1));
}
int add(int a, int b){
return a + b;
}
みたいな感じ
個人的には修正後の方がバグが出やすいと思います。
特に1つの関数の中に複数のreturnが出てくるのが逆に追いにくくする要因かと。
この手法p5.play(js)でも使えますか?
「IsDead()」のようにネガティブを判定するより、「IsAlive()」のようにポジティブを判定した方が直感的で親切かもしれませんね。
やりたいことを抽象化すると「命があるかどうか」を判定したいということになりますので、
true(真) -> 命がある
false(偽) -> 命がない
とする方が、名前(目的)と結果(戻り値の意味)が直感的に結びつきやすく、自然な表現になります。
「IsEnable()」「IsVisible()」のように、ポジティブを判定する事例は多くありますが、無効な値であるか確認する「IsInvalid()」のように、ネガティブを判定する方が意味が通りやすい事例もありますので、使い分けが難しいですが、、、、、
気を付けますー^^;
こういうの助かりますm(_ _)m
Bard使えるようになっていないのかな?比較してみて欲しい。結構使えます。
今度ゲーム系(cg)の専門学校にオープンキャンパスに行くのですが、これだけは聞いとけ!!的なものはありますか?
実績は聞いておきましょう!
去年の卒業生何人で、その内何人ゲーム会社入ったかは聞いておいた方が良いと思います👍
大学卒で中小企業のゲーム業界にプログラマーとして入るのは難しいですか?
同じ実力ならむしろ大卒の方が優遇されると思います👌
関数内に複数のreturnを置くのはホビーユース向けですね。コードレビューで指摘対象になるので納品出来ない可能性があります。
それどこの業界ですか?聞いたこと無いです。
@@hogebar5470 MISRAという世界基準です。
なるほど MISRA C ですか。組み込みや自動車業界の方ですかね。
MISRA C ではそういう規則かもしれませんが、C# や Python、TypeScript などの言語ではガード節はダメというのは聞いたことがなかったので。
@@hogebar5470 ええ、そういう直接生命に関わらないものを指してホビーユースと言っています。
@@sylphied. なかなか煽った言い方だとは思いますが、承知しました。
基本的にこういう時は&&を主に使ってたけどこういう事も出来るのかと思ったただのDxLibでクソゲーだけ作ってる柳葉魚であった。
こういうのほんとに助かる。
いつ知らぬ間にクソコード書いてるか不安になる時あるのでこういうのありがたいです。
ダウンロードしたので複数回聞いてみるようにします
言語はどこからどこまで使えるんですかね
私は美しくまとめるってどーだかなと思うかな。
確かに斜めは読みにくさを感じるかもしれないが、シンプルに意図が読み取りやすいし、割と改修しやすいのよ。
美しく=読み取りやすくする
なんだけどなぁ…
多分斜めに慣れてるからそう思うだけでは?
ポイントは逆のif文ね
ゲームの機能をどういうクラスに分けるべきか、またどのくらいまで機能を細分化するべきかいまいち分からないので説明や紹介をお願いします
今後も見に行きます
Ohhhh
if(false)
{
a:
//この辺に全角スペース
}
goto a;
構造化プログラミング涙目
通常、関数と言わず、メソッドと呼びます。
丁度C♯学習してて.netとはとかキャストとはとか読んでて挫折しそうです