サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
qiita.com/RyotaMurohoshi
.NET 6において、LINQにいくつかのメソッドが追加されました。また、既存のLINQメソッドに新たなオーバーロードが追加されました。非常に便利なメソッド、「一見するとこれは便利なのか?」と疑問が浮かぶけれど実は活躍するメソッドなど、様々なメソッドがあります。 この投稿では、そんな.NET 6において追加されたLINQメソッドを紹介します。 指定した条件での最大・最小を探す「MinBy、MaxBy」 このようなPlayer型と
.NET 5におけるOrderBy(keySelector).First(predicate)の計算量が増える破壊的変更と、それから考える.NET 5の立ち位置C#.NETLINQ.NETFramework.NETCore 『.NET 5は、.NET Core 3.1の次期バージョンであると同時に、.NET Framework 4.8の移行先でもある。』 そんなことを.NET 5の破壊的変更リスト一覧にある「Complexity of LINQ OrderBy.First{OrDefault} increased」から感じました。 この投稿では、その破壊的内容と背景を紹介します。 破壊的変更の概要 .NET 5の破壊的変更である「Complexity of LINQ OrderBy.First{OrDefault} increased」の概要説明文は以下の通りです。 The impleme
Unityでのゲーム開発では、多くのGameObjectやPrefabそしてAssetが必要で、それらは他のGameObjectやAssetへの参照を持っています。その参照関係を正しく管理・運用するのは大規模なゲーム・長期間のプロジェクトではとても難しいです。「間違って使っているAssetを削除してしまい、それを参照している部分が原因で不具合が発生した」という経験はありませんか。このような不具合を、どうやったら防げるでしょうか? 自分のおすすめは、Odin Validatorを用いたプロジェクト全体の自動検証です。Odi Validatorを用いれば「ここは必ず何かしらのAssetを参照しないといけないと設定する。もし参照していない場合は、エラーを表示する」という設定が実現できます。「間違って使っているAssetを削除してしまい、それを参照している部分が原因で不具合が発生した」という不具合
C# 9.0から共変戻り値型が新機能として加わって、メソッドのオーバライドで返値型を元の型の派生型にできるようになったC#.NET C# 9.0より前では、オーバライド元のメソッドとオーバライドしたメソッドで、返り値型は同じ型にしないといけませんでした。そのため、以下のコードはC# 9.0より前ではコンパイルエラーとなりました。メソッドをオーバーライドした時、返り値型を派生型にできなかったからです。 ところがC# 9.0で、共変戻り値型が新機能として加わり、メソッドのオーバライドで返り値型を元の返り値型の派生型にできるようになりました。そのため、以下のコードはC# 9.0では、コンパイルエラーにならず問題なく動作します。 public class Enemy { /* 略 */ } public class BossEnemy : Enemy { /* 略 */ } public clas
Unityでも新しいC#! 長い歴史を持つプログラミング言語、C#。C#は着実に進化し、便利な言語機能を追加してきました。ところがゲームエンジンUnityでは少し前まで、古いC#しか使うことができませんでした。 2017年夏 Unity 2017.1がリリースし、「.NET 3.5 Equivalent」に加えて、「.NET 4.6 Equivalent」がExperimentalとして選べるようになりました。 2018年初夏 Unity 2018.1がリリースし、「.NET 4.x Equivalent」がExperimentalでなく、安定版になりました。 2018年冬 Unity 2018.3がリリースし、「.NET 4.x Equivalent」がデフォルトになり、「.NET 3.5 Equivalent」が非推奨になりました。 Unityも、現在は特に工夫をせずに比較的新しいC#
この投稿では、2019年におけるC#のアクセス修飾子を紹介します。 C# 7.2から新たにprivate protectedが新たに加わりました。これは、『「同一のアセンブリ」 かつ 「その型とその派生型」はアクセスできる』というアクセスレベルです。そしてゲームエンジンUnityにAssembly Definition FilesやPackage Managerが加わったことで、Unity開発者は「アセンブリ」を意識して開発する機会が増えました。継続的なライブラリ更新のために、このようなアセンブリに関係するアクセス修飾子をしっかりと理解すべき状況となっています。 自分で開発したライブラリを社内で公開している人、世の中に広く公開したい人は、2019年におけるC#のアクセス修飾子理解することをオススメします。 アクセス修飾子とアクセスレベル アクセス修飾子は以下の4個です public pro
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
「さぁ、UnityのTilemapを始めよう!」はUnityゲームエンジンの機能、「Tilemap」の機能・使い方を紹介する記事シリーズです。 この記事は、全8回中の第1回です。 ※ この記事シリーズは、技術書典4で頒布した技術同人誌「Unity Tilemap Startbook」の内容を、ブログ用に修正・編集したものです。 はじめに 2016年5月のUnite Tokyo。そこでの「ビルディング・2Dワールド in Unity ~2D機能のあれやこれや~」というセッションで感じたワクワクを、今でも鮮明に覚えています。将来的にUnityに導入される2D向けの新機能を紹介するこのセッションの中で、筆者はTilemapを知りました。「これを使って、あんなゲームやこんなゲームを作りたい」と強く思った筆者は、ベータ以前の実験段階バージョンであるExperimental Preview版を試し、フ
C#において 「person?.Name」と「person == null ? null : person.Name」は等価じゃありません。 違う見方をすると、 null条件演算子 (?.) において、nullとの比較に 「==」オペレーターでの比較は行われません。(型に対して==で独自定義した処理は呼ばれない) 同様に、null合体演算子 (??)でも同じように、nullとの比較に 「==」オペレーターでの比較は行われません。(型に対して==で独自定義した処理は呼ばれない) 再現・確認コード これを再現・確認できるコードは次の通りです。 // 本当はEqualsとかも実装するべき class Person { public string Name { get; set; } public static bool operator ==(Person lhs, Person rhs) {
はじめに 本投稿ではJavaとKotlinの相互運用において、 「Kotlinのクラスで定義したプロパティが、Javaからどのように見えるのか、呼び出すことができるのか」 を紹介します。まず Getterのみ SetterとSetterの両方 が生成される場合があることを説明し、次に生成されるSetterとGetterの名前について説明します。 Getterのみができるのか?GetterとSetter両方ができるのか? 次のようなKotlinのPersonクラスを用意します。
2017年11月末、Kotlin 1.2がリリースされました。 Kotlin 1.2 Released: Sharing Code between Platforms Kotlin 1.2 リリース: プラットフォーム間のコード共有 What's New in Kotlin 1.2 Kotlin 1.2でも、Standard Libaryにいくつかの追加があります。 この投稿では、IterableやSequence、MutableCollectionなどコレクション関連のクラスの追加関数を紹介します。 zipWithNext : インデックスの隣り合う要素を合成したList・Sequenceを生成する Iterable<T>とSequence<T>の拡張関数として、zipWithNextという「インデックスの隣り合う要素を合成したリストを生成する」関数が追加されました。 Iterable<
var persons = new []{ new { Name = "Taro", Age = 30, }, new { Name = "Jiro", Age = 27, }, new { Name = "Saburo", Age = 24, }, }; // foreachでループをまわせる foreach (var person in persons) { Console.WriteLine (string.Format("Name:{0} Age:{1}", person.Name, person.Age)); // 匿名型はToStringをオーバーライドしているので、これでもいい感じに表示はされる // Console.WriteLine (person); } var personStringEnumerable = persons.Select (person => per
この物語はフィクションです。 非プログラマー 「なんかバグってる!直して!」 プログラマー 「どれどれ?バージョンは?」 非プログラマー 「えーっと、ちょっと前のやつ!」 プログラマー (ちょっと前っていつのだよ?何回ビルドしたと思ってんだよ!?) はじめに 先ほどの物語はフィクションではありますが、モバイルゲームアプリの開発現場において、このような不幸な経験がある方も多いのではないでしょうか? 解決策の一つはバージョンをゲームアプリ内に表記して、それを報告してもらうことです。(もちろん端末のアプリ管理機能を使って調べてもらうのもありですね。) しかし、これはビルドごとにバージョンを適切に更新している必要があります。 また、もし製品版やデバック版、ステージング版など複数のビルド設定がある場合、不具合が発生したのがどのビルド版なのかを把握する必要もあります。 前述のフィクションの物語が起
この投稿では、TileMapEditorの概要を紹介します。 はじめに Unity Asset Storeのカテゴリの一つ「テクスチャ&マテリアル」カテゴリには、「2Dタイルマップ」というサブカテゴリがあります。このサブカテゴリには四角形のタイルはもちろん、六角形そして斜め視点の四角形のものなど様々な2D タイルのアセットがあります。一例をあげると次のようなアセットです。 2D Mine Tileset by GameCube retro RPG tileset 01 by hiro Isometric Tile Bundle by Golden Skull Studios Painted 2D Terrain Hexes: Basic Set by David Baumgart さて、これらの2Dのタイルアセットを使って2Dの戦略シミュレーションゲーム、2Dのアクションゲームなど作るとし
【Unity勢に】C#のforeachとラムダ式の落とし穴、そしてその破壊的言語仕様変更【今読んでほしい】C#.NETUnity.NETFramework はじめに C#アドベントカレンダー2016、19日目は『【Unity勢に】C#のforeachとラムダ式の落とし穴、そしてその破壊的言語仕様変更【今読んでほしい】』と題して室星が担当させていただきます。 タイトルはラムダ式としていますが、正確にはデリゲートです。 foreachとデリゲートの落とし穴 次のコードを実行するとどのようなログが出力されるでしょうか? var names = new List<string> { "Taro", "Jiro", "Saburo" }; var actions = new List<Action>(); foreach (string name in names) { actions.Add(()
【!ってなんだ】KotlinとJava、nullとPlatformType【NullableにNotNull】JavaAndroidKotlin この投降は、Kotlin Advent Calendar 2016の5日目の投稿です。 はじめに Kotlinではnullをより扱いやすくするように、Nullable、「?.」そして「?:」など様々な言語機能・構文が提供されています。 Kotlinのみで書かれたコードでは、NullPointerExceptionに遭遇することはそうそうないでしょう。 ところが、実際の開発ではではKotlinだけで製品を完成させることはまずできません。Javaで書かれたSDKや外部ライブラリを利用して製品を作っていくことがほとんどです。 その場合、 Javaで定義されたメソッドの返り値を変数に代入する Javaで定義された抽象クラスを継承する Javaで定義された
この投稿は「Visual Studio Code Advent Calendar 2016」の4日目の記事です。 はじめに 本投稿では、Visual Studio Codeを用いてMarkdownで執筆する際、覚えておきたい2つのショートカットを紹介します。 Previewに表示切り替え ウィンドウ分割と同時にPreview表示 です。 ウィンドウ分割と同時にPreview表示 Windows Ctrl+K V Mac ⌘K V Linux Ctrl+K V 上記のキーボードショートカットにより、ウィンドウを分割し、新たなMarkdown Previewのタブを生成・表示します。 上の画像の状態から、キーボードショートカットにより こうなります。 プレビュータブに表示切替 Windows Ctrl+Shift+V Mac ⇧⌘V Linux Ctrl+Shift+V 上記のキーボードショー
はじめに 「Where(predicate).Count () > 0じゃなくて、Any(predicate)を使おう」というお話です。 LINQ最高ですよね!ですよね、ですよね!!!さて自分が最初に使い始めたのものの中に、WhereとCountがあります。これらを組み合わせて次のような事をやれます。 「リストや配列の中に特定の条件を満たす要素が一つでも存在するか調べる」 例えば、List<int>型のリストの中に0以上の数が少なくとも一つ存在するかどうか調べるなどですね。これをWhereとCountを用いて次のように書く事"も"できます。(下記よりもっといい書き方がありますが。) ```csharp:List`型のリストの中に0以上の数が少なくとも一つ存在するかどうか調べる(1) List intList = LoadIntList (); bool isExist = intList
はじめに Unity5.3から以前はUnity Test Toolsの一部だった、Unit Tests RunnerがUnity組み込みになりました。 この投稿では、関連情報の紹介と簡単な使い方を説明します。 v1.5.7未満のUnity Test Toolsを使っていたUnityのプロジェクトを、Unity 5.3にアップグレードした場合、コンパイルエラーになります。Unity Test Toolsをv1.5.7かそれより新しいものに更新してください。 Unity5.3以前 Unity5.3以前は、Unity Technologies社が提供するUnity Test Toolsを利用すればユニットテストを行えました。このアセットの内部にはNUnitのDLLが含まれていました。ちなみにこのAssetはユニットテスト関連以外にもIntegration Test Runnerなども含まれていま
はじめに C#最高ですよね!LINQ最高ですよね!!! さてそんなC#・LINQに対してですが、「LINQにこういうの欲しいな〜。無いからLINQみたいにIEnumerable<TSource>の拡張メソッドとして、IEnumerable<TResult>を返すメソッドを作ろう!」と「オレオレLINQメソッド」を作ったことがある人も結構いると思います。 そんな「オレオレLINQメソッド」ですが、気をつけないと思わぬ落とし穴にはまるかもしれません。 あなたの作った「オレオレLINQメソッド」、ちゃんと正しくArgumentNullException投げますか? LINQの多くのメソッドは遅延実行 LINQの多くのメソッドは遅延実行されます。 using System; using System.Linq; using System.Collections.Generic; namespace
この投稿はVisual Studio / Visual Studio Code Advent Calendar 2015の3日目です。 はじめに 2015年も残すところ1ヶ月をきり、アドベントカレンダーのシーズンがはじまりましたね!みなさん進捗どうですか? ところでQiitaやはてなブログなど、Markdownで記事を書かれている人が多いのではないでしょうか?みなさんEditor、何を使っていますか? 自分は以前Markdownで文書を書く際、Kobitoを使っていました。ところが業務・趣味でVisual Studio Codeを使い始めてから、Markdownでの執筆でもVisual Studio Codeを用いるようになりました。Visual Studio Codeは、ショートカットを駆使することで大変効率良く作業を行うことが可能です。Markdownでの記事執筆の際も、キーボードショ
はじめに Unity開発において、Debug.Logはよく使うと思います。 実はDebug.Logメソッドは、二つのオーバーロードが存在します。 public static void Log(System.Object message) public static void Log(System.Object message, UnityEngine.Object context) 1つ目のオーバーロードは良く使う方も多いと思います。ところで2つ目の方のオーバーロード、ご存知でしたか?お恥ずかしながら僕は知りませんでした。 ログを吐いたコンポーネントを所持するゲームオブジェクトを識別できる public static void Log(object message, Object context)のドキュメントには次のように説明されています。 When you select the mes
using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; public class Sample : MonoBehaviour { [SerializeField] Slider slider; void Start () { slider.onValueChanged.AddListener (OnSlide); } void OnSlide (float value) { Debug.Log (value); } } これも実はUnityAction<float>という型を使っています。コードには書いてありませんが。 さて button.onClick.AddListener (ShowLog); slider.onValueChanged.AddListener (OnSlide); という記述に注目してく
はじめに この投稿は、Kotlin Advent Calendar 2014の2日目の投稿です。 前日1日目は、@ngsw_taroさんの、今年1年のKotlinで何があったかを紹介している「Kotlin Advent Calendar 2014」です。 明日3日目は、@yy_yankさんの、「声に出して読みたいKotlin」です。 この投稿では、JVM言語Kotlinの言語機能である、拡張関数と拡張プロパティを紹介します。Kotlin公式サイトの、Extensionsの内容に加えて、少しだけ「こういう使い方もあるよね」とか、「C#と比べてこうだね」ということも述べます。 このクラスにこんなメソッドがあったらいいなという時は? 「このクラスにこんなメソッドがあったらいいな?」そんな時はありませんか? そんな時、Javaの場合は次のようなことが考えられます。 そのクラスを継承して、サブクラス
はじめに 引数にラムダ式を渡す ラムダ式の型はFuncとActionが用意されている ラムダ式はデリゲートを作るためのもの このような記述や説明をしているC#関連のブログをたまに見かけます。実はこれらは正確には違ったり、正しくなかったり、ちょっと足りなかったりします。「先ほどの説明は正しいのではないか?」と思った方、ぜひこの投稿を読んでください。ラムダ式やその関連要素についての理解が深まると思います。 そして、「LINQを勉強したいのだけれど、ラムダ式とかFunc<T, TResult>とかわからん!」、「Func<TSource, bool>型の引数をとるメソッドに、『num => num > 0』とラムダ式を書いているけれど、それがどういう仕組みか良くかわからない...」という方、ぜひこの投稿を読んでください。わからないことが理解できたり、疑問がとけると思います。 この投稿では次のC#
using UnityEngine; public class HelloInputGetAxis : MonoBehaviour { void Update () { float dx = Input.GetAxis ("Horizontal"); float dy = Input.GetAxis ("Vertical"); transform.Translate (dx, dy, 0.0F); } } 例えば上記のコードで上矢印キーを押した場合、dyにはfloat型で正の値が代入されます。押し始めてすぐのフレームでは0.01Fなど小さな値ですが、連続で押し続けることで、徐々に値が増えていき、1.0Fになります。1.0Fになった後にボタンを押し続けても、それ以上値は増えません。 前述のように、キーボードやJoyStickの入力に対して、Input.GetAxisは-1.0Fから1.0Fを
次のページ
このページを最初にブックマークしてみませんか?
『@RyotaMurohoshiのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く