Niigata.NET 2.1を開催しました #ngtnet

Niigata.NET 2.1 テックトーク+ハンズオン & .NET開発お悩み相談室 – connpass
https://ngtnet.connpass.com/event/41607/

先週11/19(土)に今年2回目となるNiigata.NET勉強会を開催しました。今回は従来のテックトークに加え、参加者の皆さんにも手を動かしてもらおうと、ハンズオン形式のセッションも取り入れてみました。

(当日の様子はこちら

 

プログラミング初級講座 C#編 – 分岐 by @AILight

最初のセッションは、新潟が誇るMS MVPの石野さんによる、シリーズもの第3弾です。if、switchといった「分岐」を扱う言語機能についてフォーカスし、初歩的な内容から紹介していただきました。

その中で印象的だったのは「分岐がないことが分岐の良い条件である」といったような雰囲気の言葉でした。

ともすると、分岐というものはいわゆるスパゲティコードになってしまいがちなものです。特に初心者、初級者のうちは、いわゆる設計書に書かれたロジックをそのまま表現しようとして、様々な条件が入り組み、深くなったif分を書いてしまうものです。

こういったif文、switch文を「いかに減らすか」が、分岐を扱うキモだと石野さんは主張されました。

その為に、if文をどうやって減らすかということを、コード例を用いて説明しました。その方法は主に以下の通り。

  1. 配列等を使ったジャンプ
  2. 「条件」でなく「データ」に着目

配列等を使ったジャンプ

引数が0->5のような値だとして、それに対応する値を返すような場合、それは引数をインデックスとみなして配列を用いて目的の値を返すようにすることで、if文をなくすことができます。

変更前
int SomeMethod(int value)
{
  if (value == 0)
  {
    return 5;
  }
  else if(value == 1)
  {
    return 10;
  }
  else if (value == 2)
  {
    ...
  }
  ...
}
変更後
if SomeMethod(int value)
{
  return new [] { 5, 10, ... }[value];
}

何かしらの値のテーブルを使って対応する値を返すようなケースでは、案外使えるケースはありそうです。

「条件」でなく「データ」に着目

小規模なアプリでメニューを作る際、ユーザーの情報を条件にif文を連ねて必要なメニューを表示するようにすると、条件の追加、変更に弱くなってしまいます。それを解決するため、「ユーザー情報」側にどのメニューを表示するかの判断を委譲し、メニューを構築する側ではそれを利用するだけにします。

変更前
if (user.IsHoge)
{
  // A機能メニューに追加
}
else if (user.IsFuga)
{
  if (user.IsPiyo)
  {
    // B機能メニューに追加
  }
  else
  {
    // C機能メニューに追加
  }
}
変更後
if (user.UseA)
{
  // A機能メニューに追加
}
else if (user.UseB)
{
  // B機能メニューに追加
}
else if (user.UseC)
{
  // C機能メニューに追加
}

このように「データ」を主体に構築することで、条件の追加、変更に強くなります。

 

先日リリースされたC# 7では「型スイッチ」機能などでさらに分岐のパターンが増えます。こういったものを使うにも、基本的なif、switchは押えておいた方がよいでしょう。

 

ASP.NET MVC開発体験 by @masaru_b_cl

私のセッションです。asp.net/mvcからアクセスできるASP.NET 5のチュートリアルを、会場の皆さんとやりながら簡単にASP.NET MVCの説明を行いました。

一緒に進めていくので、それぞれ進み具合が違い、ある程度余裕を持って進めていたので、MVCのCとVまでしかできませんでした。それでも、Cでリクエストを受け取って処理して返す、VはRazorで書く、Vの編集と確認はリビルド不要、くらいは説明できたので良しとしましょう。

実際、今回のセッションの裏テーマは「公式チュートリアルやろうぜ」でした。

大抵のメジャーなプラットフォーム、フレームワークは公式がチュートリアル用意してあることが多いです。もちろん英語なわけですが、「うわっ、英語怖い!」を乗り越えて読んでみると、実際は中学英語範囲の構文で読めますし、重要なのはコードなので万国共通のため、あんまり問題ありません。

それを避けてわざわざどこの馬の骨ともわからない人が書いた日本語blogエントリを読んだり、公式以外のチュートリアルを見ても、情報が古かったり、環境構築が大変だったりして、すんなりいかないことが、個人的には多いと感じています。

その点、公式チュートリアルは必要十分な情報をコンパクトにまとめてあることが多いです。一例として、某レールに乗るフレームワークのチュートリアルは、環境の違いかうまくできなかったんですよねぇ。でも、公式のやつは引っかかることもなくできたという経験があります。

ぜひ、未知のプラットフォーム、フレームワーク、ライブラリは、まずは公式チュートリアルから入ってみることをお勧めします。

あと、今回@circled9さんが前日にリリースされたばかりのVisual Studio for Macでぶっこんできて、「強い」と思いました。(ありがとう!)

 

.NET開発相談室

Niigata.NETの恒例コーナーにしていこうと目論んでおりますw

前回主催側がしゃべりすぎたため、今回は参加者の皆さんに多くしゃべってもらおうと思ったのですが、なかなかうまくネタを引き出せないものですね。それでも、なんとか四苦八苦してネタを絞り出し、あーだこーだ言える機会が持てたのは良かったです。

ただ、イベント終了後に「string型の変数の初期化をnullでやるのと空も時でやるの、どっちがいいんですかね?」みたいなことを聞かれ、「それをさっきの相談室で言ってもらえたら!」って思ったので、次回は「こんなのでいいんですよ」ってのを、もっと言ってかないとなぁと思った次第です。

 

そんな感じで、第3回の勉強会を終えました。今後はなんとか最低でも年2回ペースで開けるよう、いろいろと動いていきたいと思います。あと、主催側じゃないスピーカーの確保もぜひ。

 

なお、Niigata.NETでは「中の人」も募集しております!別にスピーカーをやれというわけではなく、イベント運営に必要な会場設営、受付、懇親会の手配など、色んな雑事の一部をお手伝いしていただけたらと思います。やってもいいよという方は、この記事へのコメント、Twitterでのメンション、ハッシュタグ#ngtnetを付けたつぶやきなど、何らかの手段でお知らせください。

Niigata.NET 2.1を開催しました #ngtnet」への1件のフィードバック

  1. ピンバック: Niigata.NET 3.0を開催しました #ngtnet | be free

コメントを残す