0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VB.NET 4.8.1を今の時代に触る!!PHP 8.x, TypeScript 5.xとの言語仕様比較(第5章 演算子)

0
Last updated at Posted at 2025-12-27

目次
第4章 変数と定数

第5章 演算子

5.1 算術演算子

演算 PHP TypeScript VB.NET
加算 + + +
減算 - - -
乗算 * * *
除算 / / /
整数除算 intdiv() Math.floor(a/b) \
剰余 % % Mod
累乗 ** ** ^

PHP

<?php
$a = 10;
$b = 3;

echo $a + $b;         // 13
echo $a - $b;         // 7
echo $a * $b;         // 30
echo $a / $b;         // 3.333...
echo intdiv($a, $b);  // 3(整数除算)
echo $a % $b;         // 1
echo $a ** $b;        // 1000

// 複合代入演算子
$a += 5;
$a -= 5;
$a *= 2;
$a /= 2;
$a %= 3;
$a **= 2;

// インクリメント/デクリメント
$a++;
++$a;
$a--;
--$a;

TypeScript

const a = 10;
const b = 3;

console.log(a + b);              // 13
console.log(a - b);              // 7
console.log(a * b);              // 30
console.log(a / b);              // 3.333...
console.log(Math.floor(a / b));  // 3
console.log(a % b);              // 1
console.log(a ** b);             // 1000

// 複合代入演算子
let x = 10;
x += 5;
x -= 5;
x *= 2;
x /= 2;
x %= 3;
x **= 2;

// インクリメント/デクリメント
x++;
++x;
x--;
--x;

VB.NET

Dim a As Integer = 10
Dim b As Integer = 3

Console.WriteLine(a + b)      ' 13
Console.WriteLine(a - b)      ' 7
Console.WriteLine(a * b)      ' 30
Console.WriteLine(a / b)      ' 3.333...(Double)
Console.WriteLine(a \ b)      ' 3(整数除算)
Console.WriteLine(a Mod b)    ' 1
Console.WriteLine(a ^ b)      ' 1000(Double)

' 複合代入演算子
a += 5
a -= 5
a *= 2
a /= 2   ' 注意:結果は Double になりうる
a \= 2   ' 整数除算の複合代入
a ^= 2

' VB.NET にはインクリメント演算子がない
a = a + 1  ' または a += 1

5.2 比較演算子

等価比較

演算 PHP TypeScript VB.NET
等しい(緩い) == == =
等しい(厳密) === === =(型は静的)
等しくない(緩い) !=, <> != <>
等しくない(厳密) !== !== <>

PHP

<?php
// 緩い比較(型変換あり)
var_dump(1 == "1");      // true
var_dump(0 == "");       // true
var_dump(0 == "abc");    // true(PHP 7)/ false(PHP 8)
var_dump(null == false); // true

// 厳密比較(型も比較)
var_dump(1 === "1");     // false
var_dump(1 === 1);       // true

// 宇宙船演算子(PHP 7+)
echo 1 <=> 2;            // -1(左 < 右)
echo 2 <=> 1;            // 1(左 > 右)
echo 1 <=> 1;            // 0(等しい)

TypeScript

// 緩い比較(非推奨)
console.log(1 == "1");           // true
console.log(0 == "");            // true
console.log(null == undefined);  // true

// 厳密比較(推奨)
console.log(1 === "1");          // false
console.log(1 === 1);            // true

// TypeScript では === を使うべき
// ESLint: eqeqeq ルールで強制可能

VB.NET

' VB.NET は静的型付けなので厳密比較のみ
Console.WriteLine(1 = 1)       ' True
' Console.WriteLine(1 = "1")   ' Option Strict On でエラー

' 文字列比較
Dim s1 As String = "Hello"
Dim s2 As String = "Hello"
Console.WriteLine(s1 = s2)     ' True(値で比較)

' オブジェクト参照の比較
Dim obj1 As New Object()
Dim obj2 As Object = obj1
Console.WriteLine(obj1 Is obj2)      ' True(同じ参照)
Console.WriteLine(obj1 IsNot obj2)   ' False

' 文字列の参照比較
Console.WriteLine(s1 Is s2)                        ' True(インターン化されている場合)
Console.WriteLine(Object.ReferenceEquals(s1, s2))  ' より明示的

大小比較

演算 PHP TypeScript VB.NET
より大きい > > >
より小さい < < <
以上 >= >= >=
以下 <= <= <=

5.3 論理演算子

演算 PHP TypeScript VB.NET
AND &&, and && And, AndAlso
OR ||, or || Or, OrElse
NOT !, not ! Not
XOR xor ^ (ビット) Xor

短絡評価

<?php
// PHP: && と || は短絡評価
$result = false && expensiveFunction();  // 右辺は評価されない
$result = true || expensiveFunction();   // 右辺は評価されない

// and と or は優先順位が低い
$result = true and false;  // $result = true(代入が先)
// TypeScript: 常に短絡評価
const result = false && expensiveFunction();  // 右辺は評価されない
const result2 = true || expensiveFunction();  // 右辺は評価されない
' VB.NET
' And/Or は両辺を評価
Dim result = False And ExpensiveFunction()  ' 右辺も評価される

' AndAlso/OrElse は短絡評価
Dim result2 = False AndAlso ExpensiveFunction()  ' 右辺は評価されない
Dim result3 = True OrElse ExpensiveFunction()    ' 右辺は評価されない

5.4 文字列結合演算子

言語 結合演算子 備考
PHP . + は算術演算
TypeScript + 暗黙の型変換あり
VB.NET & + も可能だが & 推奨

PHP

<?php
$str = "Hello" . " " . "World";
$str .= "!";  // 複合代入

// 変数展開
$name = "John";
$greeting = "Hello, $name!";
$greeting = "Hello, {$name}!";  // 波括弧あり

TypeScript

const str = "Hello" + " " + "World";
let s = "Hello";
s += "!";

// テンプレートリテラル
const name = "John";
const greeting = `Hello, ${name}!`;
const multiline = `
Line 1
Line 2
`;

VB.NET

Dim str As String = "Hello" & " " & "World"
str &= "!"  ' 複合代入

' + も使えるが Nothing との結合で挙動が異なる
Dim s1 As String = "Hello" + Nothing  ' 例外の可能性
Dim s2 As String = "Hello" & Nothing  ' "Hello"(安全)

' 文字列補間(VB 14+)
Dim name As String = "John"
Dim greeting As String = $"Hello, {name}!"
Dim formatted As String = $"Value: {value:N2}"  ' 書式指定

5.5 Null合体演算子

言語 Null合体 Null条件代入 Null条件アクセス
PHP ?? ??= ?->
TypeScript ?? ??= ?.
VB.NET If(a, b) なし ?.

PHP

<?php
// Null合体演算子
$value = $input ?? "default";
$value = $a ?? $b ?? $c ?? "default";  // 連鎖可能

// Null合体代入(PHP 7.4+)
$array['key'] ??= "default";

// Nullsafe演算子(PHP 8.0+)
$result = $obj?->method()?->property;

TypeScript

// Null合体演算子(nullとundefinedのみ)
const value = input ?? "default";
const value2 = a ?? b ?? c ?? "default";

// 注意:|| との違い
const x = 0 || "default";   // "default"(0はfalsy)
const y = 0 ?? "default";   // 0(nullishではない)

// Null合体代入
let obj = { key: undefined };
obj.key ??= "default";

// オプショナルチェイニング
const result = obj?.method?.()?.property;

VB.NET

' If 演算子(三項演算子としても使用)
Dim value As String = If(input, "default")
Dim value2 As String = If(a, If(b, If(c, "default")))

' Null条件演算子(VB 14+)
Dim result = obj?.Method()?.Property

' Null条件付きインデックス
Dim item = array?(0)

' 注意:If 演算子と IIf 関数の違い
' IIf は両方の引数を評価する(非推奨)
Dim bad = IIf(obj IsNot Nothing, obj.Value, "default")  ' NullReferenceException の可能性
Dim good = If(obj IsNot Nothing, obj.Value, "default")  ' 短絡評価

5.6 三項演算子/If演算子

PHP

<?php
// 三項演算子
$result = $condition ? "yes" : "no";

// Elvis演算子(左辺がfalsyならデフォルト)
$result = $value ?: "default";

// 三項演算子のネスト(括弧推奨)
$result = $a ? "a" : ($b ? "b" : "c");

TypeScript

// 三項演算子
const result = condition ? "yes" : "no";

// ネスト
const result2 = a ? "a" : b ? "b" : "c";

// 型の推論
const value = condition ? 42 : "string";  // number | string

VB.NET

' If 演算子(三項演算子相当)
Dim result As String = If(condition, "yes", "no")

' ネスト
Dim result2 As String = If(a, "a", If(b, "b", "c"))

' 二項形式(Null合体)
Dim value As String = If(nullableValue, "default")

' IIf 関数(レガシー、非推奨)
' 両方の引数が評価されるため副作用に注意
Dim bad = IIf(True, GetValue(), ThrowError())  ' ThrowError() も実行される

5.7 ビット演算子

演算 PHP TypeScript VB.NET
AND & & And
OR | | Or
XOR ^ ^ Xor
NOT ~ ~ Not
左シフト << << <<
右シフト >> >> >>
符号なし右シフト なし >>> なし
<?php
$a = 0b1010;    // 10
$b = 0b1100;    // 12
echo $a & $b;   // 8  (0b1000)
echo $a | $b;   // 14 (0b1110)
echo $a ^ $b;   // 6  (0b0110)
echo ~$a;       // -11
echo $a << 1;   // 20
echo $a >> 1;   // 5
const a = 0b1010;      // 10
const b = 0b1100;      // 12
console.log(a & b);    // 8
console.log(a | b);    // 14
console.log(a ^ b);    // 6
console.log(~a);       // -11
console.log(a << 1);   // 20
console.log(a >> 1);   // 5
console.log(a >>> 1);  // 5(符号なし)
Dim a As Integer = &B1010    ' 10
Dim b As Integer = &B1100    ' 12
Console.WriteLine(a And b)   ' 8
Console.WriteLine(a Or b)    ' 14
Console.WriteLine(a Xor b)   ' 6
Console.WriteLine(Not a)     ' -11
Console.WriteLine(a << 1)    ' 20
Console.WriteLine(a >> 1)    ' 5

第6章 制御構造

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?