(6)比較演算子
x == y x と y が等しい #C++等と同じですね。
X != y x と y が等しくない #C++等と同じですね。
x > y x は y よりも大きい
x < y x は y よりも小さい
x >= y x は y と等しいか大きい
x <= y x は y と等しいか小さい x in y x という要素 が y に存在する #Python独特 x not in y x という要素 が y に存在しない #Python独特
この他"is"という演算子があり、これは値ではなく、オブジェクトが同一か否かを調べるとのことです。実際にColabでやってみると、
a = 100
b = 150
c = 100
print("a == b ->", a == b)
print("a == c ->", a == c)
print("a's ID->", id(a), "b's ID->", id(b))
print("a is b ->", a is b)
print("a's ID->", id(a), "c's ID->", id(c))
print("a is c ->", a is c)
c = b #値もIDも違う
print("a’s ID->", id(a), "c's ID->", id(c))
print("a is c ->", a is c)
結果は、次のようになります。
a == b -> False
a == c -> True
a's ID-> 137388688837968 b's ID-> 137388688839568
a is b -> False
a's ID-> 137388688837968 c's ID-> 137388688837968
a is c -> True
a's ID-> 137388688837968 c's ID-> 137388688839568
a is c -> False #値もIDも違う
変数オブジェクトのaとcは違うのですが、値100のメモリー位置が同じなのでしょうか?"a is c"はTrueになります。
"c = b"の所を変えて、"c = b * 2 / 3"(値は同じ)にすると、結果は、
a == b -> False
a == c -> True
a's ID-> 137388688837968 b's ID-> 137388688839568
a is b -> False
a's ID-> 137388688837968 c's ID-> 137388688837968
a is c -> True
a's ID-> 137388688837968 c's ID-> 137387420507568
a is c -> False #値は同じだが、IDは違う
「注意点: イミュータブルな型の同一性比較
整数intや文字列strなどのイミュータブル(変更不可)な型のオブジェクトに対するisやis notでの比較は注意が必要。
新たにオブジェクトを生成したときに、既存のオブジェクトへの参照が返される場合とそうでない場合がある。
例えばintの場合、-5から256の範囲の値を生成すると既存のオブジェクトへの参照が返されるが、その範囲外の値は別のオブジェクトとして生成される。
The current implementation keeps an array of integer objects for all integers between -5 and 256. When you create an int in that range you actually just get back a reference to the existing object.
整数型オブジェクト (integer object) ? Python 3.11.3 ドキュメント
C++用のリソースエディター、開発ツールとライブラリーである(2002年に初公表した)BCCForm and BCCSkeltonのサポート・解説で始まったこのブログ。BCCSkeltonのCOM対応、Unicode対応(ECCSkelton)を経て、MSCompAss.exeの開発を機にC#に流れて行き、C#もWinFormsからWPF迄来たのですが、どうもそれでもネタ切れ感が強くなってきました。
///////////////////////////////////////////////
//SpeechRecognitionEngineのテスト-Windows版
///////////////////////////////////////////////
using System;
using System.Windows;
using System.Windows.Controls; //コントロールを利用する為 //using System.Windows.Media.Imaging; //BitmapFrameを使用する為(解説:今回はプログラムアイコンを使用)
using System.Speech.Recognition; //音声認識エンジン-System.Speech.dll
namespace SpeechRecognitionWin
{ ///////////////////////////
//エントリーポイントクラス
///////////////////////////
class MainApp
{
[STAThread]
public static void Main()
{
MainWindow mwnd = new MainWindow();
Application ap = new Application(); //解説:WPFでは明示的にインスタンスを作る必要がある
ap.Run(mwnd);
}
}
本日、私の旧機(32bit Windows 10)のバックアップを取った際に、不図(そのまま放っておいた)Visual Studioを起動、更新し、「C#、WPF、Windows デスクトップ」で「新規プロジェクト」をポチっとしてみました。(注)その理由は「ここまで学習したのだから、今はスイスイと使えるだろう」と考えたからです。
ps. あと一つ。↑のイメージの通り、プロパティウィンドウの右下に「ソース管理に追加」と書かれています。これはメニューバーにある"Git"に対応しているようであり、このGitとはプロジェクトを複数人で行う際にファイルの履歴管理が面倒になることのソリューションとして開発された「フリー且つオープンソースの分散型バージョン管理システム」のようです。(GitHubはGitそのものではなく、GitHubとは、Gitの仕組みを利用したウェブ上のバージョン管理サービスのようです。)