前回から引き続き、C#でWindows OSを時間指定してシャットダウンするアプリケーションを作成していきます。
アプリの最終的な完成イメージは以下の動画の通りです。
時間、分、秒を設定して、シャットダウンまでの時間を任意に指定、キャンセルすることができます。
前回までの記事で一通りの機能は実装できたので、今回からはプログラムを改良していきます。
第4回目となる今回は『関数』の使い方をご紹介します。
簡単なプログラムを徐々にステップアップさせていきますので、その過程でプログラミングに必要な基礎知識を身につけることができます。
作業時間としては30分程度です。
説明中の見えにくい画像はクリックすることで拡大できます。
前回作成したアプリ、今回作成するアプリ
前回は『コンボボックスを追加して時間・分・秒を指定した時間でシャットダウン』までをプログラミングしました。
今回は『秒換算する関数を作成』までを作成します。
『関数(サブルーチン)』は受け取ったデータに対して、ある決められた処理を行って、その結果を返すものです。
今回は説明のために単純な時間換算だけなので、関数の利便性を実感できないかもしれませんが、関数内で処理する計算が複雑になったり、いくつかの処理を組み合わせる場合は、関数を使うことでコードが簡素化されて見やすくなったり、重複したコード入力を減らすことができます。
結果的にコーディングの高速化やミスの軽減につながりますので、早いうちに慣れておくことをお勧めします。
前回の続きから機能を追加していくので、アプリをまだ作成していない場合は、以下のリンクを参考に作成してください。
フォームのレイアウト
今回はフォームのレイアウト変更はありません。
前回のレイアウトをそのまま使用します。
プログラミング
それではプログラミングを行います。
プログラムコードを表示するには、画面右側の[ソリューションエクスプローラー]の[Form1.cs]を右クリックして[コードの表示]を選択するか、もしくはF7キーを押します。
プログラムの解説は後述しますので、まずはプログラムを入力しましょう。
今回は『b_Shutdown_Click』や『b_Cancel_Click』と同列の場所に関数と呼ばれるコードを追加します。追加する場所は次を参考にしてください。
namespace ShutDownApp
{
public partial class Form1 : Form
{
public Form1()
{
//【省略】
}
private void b_Shutdown_Click(object sender, EventArgs e)
{
//【省略】
}
private void b_Cancel_Click(object sender, EventArgs e)
{
//【省略】
}
//【ここに今回の関数を追加】
}
}
追加する関数は次の『MinToSec』、『HourToSec』の2つです。
『MinToSec』は分を秒に換算するための関数、
『HourToSec』は時間を秒に換算するための関数です。
private int MinToSec(int time_m)
{
return time_m * 60;
}
private int HourToSec(int time_h)
{
return MinToSec(time_h * 60);
}
関数を入力したら、次はこの関数を使うために『b_Shutdown_Click』内のコードを次のように変更します。
private void b_Shutdown_Click(object sender, EventArgs e)
{
System.Diagnostics.Process ShutDownProc
= new System.Diagnostics.Process();
ShutDownProc.StartInfo.FileName = "shutdown.exe";
// 変更箇所ここから
ShutDownProc.StartInfo.Arguments
= "/s /t " + (HourToSec(int.Parse(cb_Hour.Text))
+ MinToSec(int.Parse(cb_Min.Text))
+ int.Parse(cb_Sec.Text));
// 変更箇所ここまで
ShutDownProc.Start();
}
これでプログラムは完成なので、実行してみましょう。
画面上部の▶ボタン、または[F5]キーを押します。
入力ミス等がなければ、フォームが表示されます。
見た目や行われる処理が前回と変わらないことを確認しましょう。
コンボボックスから時間を選んでボタンを押してみましょう。
シャットダウン通知や、シャットダウンのキャンセル通知は表示されたでしょうか?
以上で今回のプログラミングは終了です。おつかれさまでした。
解説
プログラムの解説をします。
前回までの復習として、コンボボックスで選択された時間・分・秒を合算処理している箇所は[b_Shutdown_Click]の次の箇所でした。
ShutDownProc.StartInfo.Arguments
= "/s /t " + (int.Parse(cb_Hour.Text) * 60 * 60
+ int.Parse(cb_Min.Text ) * 60
+ int.Parse(cb_Sec.Text ));
今回はこの換算を関数で行います。
前回までの内容を思い出せない場合は、記事を復習してください。
関数(サブルーチン)
最初に『MinToSec』の記述について解説します。
private int MinToSec(int time_m)
{
return time_m * 60;
}
役割としては、MinToSecに分の値を与えてやると、秒の値に換算して返してくれるというものです。
このように、受け取ったデータに対して、ある決められた処理を行って、その結果を返すものを関数といいます。
試しに上記のMinToSecを次のように使ってみましょう。
Debug.WriteLine(MinToSec(60));
ひとまず次のようにForm1()に入力してみましょう。
Debug.WriteLineを使う場合はプログラムの先頭に『using System.Diagnostics;』を追記してください。
入力したらブレイクポイントを設定して、ステップ実行してみましょう。
ここまでの解説の『Debug.WriteLine』、『ブレイクポイント』、『ステップ実行』がわからない場合は次の記事を参考にしてください。
ステップ実行すると、MinToSecの関数にジャンプし、変数『time_m』に『60』が代入され、さらに『time_m』に60をかけた値が『return』で元の呼び出しの行に帰っていく様子がわかると思います。
戻ってきた値は60×60の結果の3600となっているので、Debug.WriteLineによって、出力ウィンドウに『3600』という文字列が出力されます。
このとき、関数内で『time_m』のように値を受け取るための変数を『引数』と呼び、
『return』で元のコードに戻っていく値を『戻り値(または返り値)』と呼びます。
関数の基本的な書き方は次のようになります。
【アクセス修飾子】 【戻り値の型】 【関数名】(【引数の型】 【引数名】)
{
【関数内の処理】
return 【戻り値】;
}
アクセス修飾子は関数を使うことができる範囲を設定するもので、今回扱った『private』は同じクラスの中でのみ使うことができるという設定です。
アクセス修飾子とクラスについては、別の記事で解説しますので、ここでは特に気にする必要はありません。定型文程度に認識していただければ大丈夫です。
以上で関数の解説は終わりです。
『HourToSec』は、関数の中でさらに『MinToSec』関数を呼び出して、プログラムを簡略化しています。
こちらもステップ実行して、関数の処理の流れを追ってみてください。
まとめ
シャットダウンタイマー作成の第4回目として、『関数』の解説をしました。
関数はプログラムの規模が大きくなると、確実に必要になる知識です。
何度も繰り返す処理のまとまりが出来たら、関数としてまとめておくように心がけましょう。
次回も、今回作ったプログラムをさらに発展させて機能を追加していきます。
C#の魅力
C#はWindows OSで知られるMicrosoftが開発したプログラミング言語です。
現在、OSシェア75%という圧倒的なユーザ数を誇るWindowsですが、
Windowsデスクトップアプリケーションを作成するとなった場合、最有力として採用されるプログラミング言語のひとつがC#でしょう。
参考: TECH+『3月デスクトップOSシェア、Windowsが増加しMacが減少』
最近ではWindows以外のアプリケーション開発環境(クロスプラットフォーム)も強化され、macOS、Linux上で動作するアプリケーションに加え、iOS、Androidのスマートフォンアプリの開発も可能となっています。
また、ゲームエンジンUnityの開発言語として使用できることもC#の魅力です。
Unityは家庭用ゲーム機(PlayStation、Nintendo Switch、Xbox等)の他にもスマートフォンゲームアプリの開発も可能な人気のゲーム開発環境です。
Unityで作られた有名なゲームとしては『ポケモンGO』、『原神』等が挙げられます。
以上のように非常に汎用性が高く、多種多様な開発現場で使用でき、魅力的なプログラミング言語であるC#ですが、もう一つの特徴である『オブジェクト指向』という考え方が、プログラミング初心者にとっては高いハードルと感じてしまうかもしれません。
オブジェクト指向が難しいとされる所以は、説明する側もどうやって説明すれば伝わるのかわからず、明確な解説方法が確立されていないという点が挙げられるでしょう。
無理に一言でまとめた概念を解説をしたところで、かえってハードルが高いと感じ、習得意欲を削ぐ結果になりかねません。
今回C#の魅力を伝えるうえで便宜上オブジェクト指向という言葉を出しましたが、
C#を習得したい方は、まずはオブジェクト指向という言葉は一旦忘れてしまって構いません。
まずはC#でできることを実際にプログラミングして慣れることが、習得への第一歩だと考えています。
そのうちご自身が実現したいアプリケーションを作成していくうえで、C#の様々な機能やテクニックを覚えていくことになると思います。
C#を使っていればオブジェクト指向はその中で自然と身についていくでしょう。
とはいえ、独学でC#を習得することはなかなか難しいと感じる方も多いかもしれません。
近年はオンラインスクールを利用して短期間で集中して実務レベルまで習熟させるという方も増えています。
プログラミングのオンラインスクールを活用する場合は、現役のエンジニアが講師となるスクールが優位でしょう。開発現場で通用する質の高い実務ノウハウを学ぶことができます。
また、オンラインスクールであれば全国どこからでも受講できるため、わざわざ都会へ出たり交通費をかけることなく、ライフスタイルに合わせて効率的にスキルを身につけることができることが魅力です。
ITエンジニアとしての強力な武器となるC#を習得するための先行投資として、オンラインスクールは一つの選択肢となり得るでしょう。
無料体験できるオンラインスクールもあるため、独学でも習得できそうか、短期集中で学んだ方がいいのか、ご自身の力量を見極めてみるのもいいのではないでしょうか。
こちらの記事ではオンラインスクールを受講する価値はあるのかについて解説しています。あわせてどうぞ
コメント