プログラム言語 固定値、コンフィグ値
固定値
namespace App\Constants;
class LANG
{
const INFO = [
1 => 'PHP',
2 => 'Python',
3 => 'Java',
];
}
コントローラ/モデル
use App\Constants\LANG;
class XXXXXX extends Model
{
function XXXXXX(){
foreach(LANG::INFO as $key => $name){
~
}
}
}
アプリ設定ファイル
※config\app.php
return [
'aliases' => [
~
// 定数ファイル
'LANG' => App\Constants\LANG::class,
],
];
ビュー(↑のアプリ設定ファイルへの追記が必要)
@foreach (\LANG::INFO as $key => $name)
{{$name}}
@endforeach
print CONST_TEISUU;
→定数
value1 = const.KEY1
‘aaa’
const.py
KEY1 = ‘aaa’
KEY2 = ‘bbb’
データ型は自動判別される。
オブジェクト型マクロ定数
#define DEF_NUM (5)
#define DEF_STR (“AAA”)
関数型マクロ定数
#define DEF_FUNC(a) ( (DEF_NUM + a) )
Console::WriteLine(DEF_NUM);
→ 5
Console::WriteLine(DEF_STR);
→ AAA
Console::WriteLine(DEF_FUNC(10));
→ 15
【固定値】
const int CONST_MYINT = 5;
const string CONST_MYSTR = “AAA”;
CONST_MYINT = 10;
// エラー
※関数ポインタにおいてメモリアドレスを変更されたくない場合の使い方
void myFunc(const int *prm){}
ENUM(列挙体)(enum)
※myclabsとは別
use BenSampo\Enum\Enum;
class TestEnum extends Enum
const ENUM1 => 0,
const ENUM2 => 1,
const ENUM3 => 2,
}];
TestEnum::ENUM1 → 0
TestEnum::getKey(TestEnum::ENUM1) → ENUM1
TestEnum::getDescription(TestEnum::ENUM1) → Eum1 ※Keyが文字に変換される
TestEnum::getValues() → [0, 1, 2]
TestEnum::getKeys() → [ENUM1, ENUM2, ENUM3]
TestEnum::asSelectArray() → [
[1 => “Enum1”],
[2 => “Enum2”],
[3 => “Enum3”],
]
TypeScript = 1,
JavaScript = 2,
PHP = 3,
};
let ts: Lang = Lang.TypeScript;
let js: Lang = Lang.JavaScript;
let php: Lang = Lang.PHP;
console.log(`ts:${ts}`); → ts:1
console.log(`ts:${js}`); → js:2
console.log(`ts:${php}`); → php:3
Stop: 0,
Moving: 1,
End: 2
};
var gState = enmState.Stop;
class UnitType(Enum):
GRAM = “g”
LITER = “L”
METER = “M”
@classmethod
def get_unit_value(cls, unit_name):
return cls(unit_name).value
@classmethod
def get_unit_name(cls, unit):
for key, value in cls.__members__.items():
if value.value == unit:
return key
return None
@classmethod
def get_names(cls):
return [unit.name for unit in cls]
@classmethod
def get_values(cls):
return [unit.value for unit in cls]
print(UnitType.GRAM)
→ UnitType.GRAM
print(UnitType.GRAM.value)
→ g
print(UnitType.GRAM.name)
→ GRAM
print(UnitType.get_unit_value(UnitType.GRAM))
→ g
print(UnitType.get_unit_name(UnitType.GRAM.value))
→ GRAM
print(UnitType.get_names())
→ [‘GRAM’, ‘LITER’, ‘METER’]
print(UnitType.get_values())
→ [‘g’, ‘L’, ‘M’]
{
enum1,
enum2,
enum3
}
enum enmTest2
{
enum1 = 1,
enum2 = 2,
enum3 = 3
}
enum enmTest3
{
enum1 = “1”,
enum2 = “2”,
enum3 = “3”
}
public void myForm_Load(object sender, EventArgs e)
{
SubRoutine(test1: enmTest1.enum1,
test2: enmTest2.enum1,
test3: enmTest3.enum3);
}
private void SubRoutine(enmTest1 test1,
enmTest2 test2,
enmTest3 test3)
{
~
}
enum1
enum2
enum3
End Enum
Private Enum enmTest2
enum1 = 1
enum2 = 2
enum3 = 3
End Enum
VBでは文字列を設定する事はできない
Private Enum enmTest3
enum1 = “1”
enum2 = “2”
enum3 = “3”
End Enum
Private Sub myForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Call SubRoutine(test1:=enmTest1.enum1, _
test2:=enmTest2.enum1)
End Sub
Private Sub SubRoutine(ByVal test1 As enmTest1, _
ByVal test2 As enmTest2)
~
End Sub
{
value1 = 0,
value2 = 1,
value3
};
int myInt = myEnum::value1;
※int型変数へ格納可能
Console::WriteLine(myInt);
// ⇒0
return 0;
public class MyEnum {
public enum VALUE{
VAL1,
VAL2,
VAL3
}
}
import static myPackage.MyEnum.VALUE.*;
public class MyMain {
public static void main(String[] args) {
int intVal1 = VAL1.ordinal();
自動的に使用できるメソッド(正確にはMyEnumが自動的に継承するenumクラスのメソッド)
→ 0
String strVal1 = VAL1.name();
自動的に使用できるメソッド(正確にはMyEnumが自動的に継承するenumクラスのメソッド)
→ VAL1
}
}
【独自メソッドを定義】
package myPackage;
public class MyEnum {
public enum custEnum{
intVAL1(1, “name1”),
intVAL2(2, “name2”),
intVAL3(3, “name3”); ←!
メソッドを作成する場合は「;」で終わる
下部のコンストラクタを呼び出す
private final int index;
private final String name;
セッターを作成しない場合は「final」
内部からのみ呼び出されるコンストラクタ
custEnum(int index, String name){
this.index = index;
this.name = name;
}
外部から呼び出されるメソッド
public int getIndex() {
return this.index;
}
外部から呼び出されるメソッド
public String getMyName() {
return this.name;
}
}
}
import static myPackage.MyEnum.custEnum.*;
public class MyMain {
public static void main(String[] args) {
int intVal = VAL1.getIndex();
→ 1
intVal = VAL1.ordinal(); も○
→ 0
String strVal = VAL1.getMyName();
→ name1
strVal = VAL1.name(); も○
→ Val1
}
}
コンフィグ値
app.logger.info(app.config.get(‘SETTING’))
→ 開発環境の設定
app.config.from_object(‘config.database.Production’)
app.logger.info(app.config.get(‘SETTING’))
→ 本番環境の設定
project
└ config
└ database.py
※database.py
class Development(object):
SETTING = “開発環境の設定”
class Production(object):
SETTING = “本番環境の設定”
リテラル
ソースコードに直接記述された変数、定数以外の値。
リテラル領域という変数等とは異なるメモリ領域に作成される。
(C#、JAVAにおけるリテラル値の参照については、「文字列型の参照」参照)
文字列リテラルを記述する場合はエスケープ処理の防止を考慮する必要がある。
(「エスケープ」参照)
//⇒ C: est est.txt
//⇒ C:[tab]est[tab]est.txt
タブ入力を意味する特殊文字「\t」と見なされている。
Console.WriteLine(@“C:\test\test.txt”);
//⇒ C:\test\test.txt
「@」を付けるとエスケープ処理されない。
Console.WriteLine(“C:\\test\\test.txt”);
//⇒ C:\test\test.txt
「@」を付けない場合。
「\」の前に更に「\」を付ける。
String myStr = “5”; //文字列リテラル
int myInt = 5; //整数リテラル
double myDoublt = 5.0; //浮動小数点リテラル
Boolean myBool = true; //真偽リテラル
リテラルにおける型の明示(接尾辞)
long myLong = 5L(または5.0l);
⇒ myLong : 5
float myFloat = 5F(または5f);
⇒ myFloat : 5.0
int myInt = 10F; ⇒エラー
整数リテラルの他基数表示
int myInt = 10; //10進数
int myInt = 010; //8進数
int myInt = 0x10; //16進数
int myInt = 0b10; //2進数
「_」(アンダースコア)
整数リテラルを読みやすくする為の記号
int a = 123_456_789;
使用ルール
・リテラルの先頭と末尾には記述できない
・記号の前後には記述できない
<?php
echo “aaaaa<br />\n”;
echo “bbbbb<br />\n”;
↓ リテラルへのphp変数の埋め込み
「プログラム言語 標準関数(テキスト系)/バインド(埋め込み)」参照
?>
html文字中へphp埋め込み
<p>
aaaaa<br />
bbbbb<br />
ccc<?php echo $purpose; ?>ccc<br />
<a href=”test.php”>ddd<a>
</p>
ヒアドキュメント
\n無しで改行、特殊文字のエスケープ不要
<<< がヒアドキュメントの開始合図
<<< の次に書いた文字が再度出現するまで全て出力される
<p>
<?php
$purpose = “ppp”;
echo <<< HERE
aaaaa<br />
bbbbb<br />
↓ リテラルへのphp変数の埋め込み
ccc{$purpose}ccc<br />
<a href=”test.php”>ddd<a>
HERE;
?>
</p>
結果
aaaaa
bbbbb
cccpppccc
ddd