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