0
Help us understand the problem. What are the problem?

posted at

updated at

逆引き言語差確認メモ(C++,C#,Python,Go)

アレってこの言語でどう書くんだっけ?

別言語を使う作業に移行した時に、たまにある ”アレって、この言語でどう書くんだっけ?” をカバー

宣言

2次元配列
func.cpp
//宣言,初期化.
int table[2][3] = { {0,1,2},{3,4,5} };

//宣言,初期化(STL利用).
std::vector<std::vector<int>> table_stl = { {0,1,2},{3,4,5} };

//引数
void function(int table[2][3])
{
    ...
}
void function_stl(std::vector<std::vector<int>> table_stl) {
    ...
}

func.cs
//宣言,初期化
int[,] table = new int[,] { { 0, 1, 2 }, { 3, 4, 5 } };
//引数,返値
int[,] function(int[,] table){
    ...
    return table;
}
func.py
#宣言,初期化
table=[[0,1,2],[3,4,5]]
#引数,返値
def function(table):
    return table
func.go
//宣言,初期化
table := [][]int{{0, 1, 2}, {3, 4, 5}}

//引数,返値
func function(table [][]int) [][]int{
    return table
}

構造体
func.cpp
//定義
struct item_data{
    std::string name;
    int num;
};
//宣言,初期化
item_data data = {"名前",1};
item_data data2[3]={{"名前1",1},{"名前2",2},{"名前3",3}};
item_data* data3 = new item_data[3]{{"名前1",1},{"名前2",2},{"名前3",3}};
func.cs
//※C#では構造体は使わずclassを使ったほうが無難.
// 参照:https://techblog.kayac.com/trap-around-struct-in-csharp
 //定義
public struct item_data
{
    public string name;
    public int num;
}

//宣言,初期化
item_data data = new item_data() { name = "名前", num = 1};
item_data[] data2 ={
    new item_data{name = "名前1",num = 1},
    new item_data { name = "名前2", num = 2},
    new item_data { name = "名前3", num = 3}
};
func.py
#※Pythonには構造体がないです。代わりにdataclassを利用しています。
#  dafataclassによって、自動的に__init__()メソッドが追加されています。
#定義
import dataclasses

@dataclasses.dataclass
class item_data:
    name: str;
    num: int;

#宣言,初期化
data = item_data(u'名前',1)
data2 = [item_data(u"名前1",1),item_data(u"名前2",2),item_data(u"名前3",3)]
func.go
//定義
type item_data struct {
    name string
    num int
}
//宣言,初期化
data := item_data{"名前", 1}
data2 := []item_data{
	{name: "名前1", num: 1},
	{name: "名前2", num: 2},
	{name: "名前3", num: 3},
}

繰り返し文

forループ
func.cpp
for(int i=0;i<3;i++){
    ...
}
func.cs
for(int i=0;i<3;i++){
    ...
}
func.py
for i in range(3):
    ...

for i in range(0,3):
    ...

for i in range(0,3,1):
    ...

func.go
for i:=0; i<3; i++ {
    ...
}

foreach文
func.cpp
foreach(auto obj in list){
    ...
}
func.cs
foreach(var obj in list){
    ...
}
func.py
foreach obj in list:
    ...

func.go
//go言語にforeach分はありませんので、rangeを使います。
for _,obj := range list {
    ...
}

条件文

if文
func.cpp
if(a<b && c==d)
{
    ...
}else{
    ...
}
func.cs
if(a<b && c==d)
{
    ...
}else{
    ...
}
func.py
if (a<b) and (c==d):
    ...
else:
    ...

func.go
if (a<b) && (c==d)
{
    ...
}else{
    ...
}
switch文
func.cpp
enum itype {
  type_a,
  type_b,
  type_c
}

void function(itype c){
    switch(c)
    {
    case type_a:
        ...
        break;
    case type_b:
        ...
        break;
    case type_c:
        ...
        break;
    default:break;
    }
}

func.cs
enum itype
{
  type_a,
  type_b,
  type_c
}

void function(itype c){
    switch(c)
    {
    case itype.type_a:
        ...
        break;
    case itype.type_b:
        ...
        break;
    case itype.type_c:
        ...
        break;
    default:break;
    }
}
func.py
#PythonにはSwitch文がありませんので、if分岐になります。
from enum import Enum,auto
class itype(Enum)
    type_a=auto()
    type_b=auto()
    type_c=auto()

def function(c):
    if c==item.type_a:
        ...
    else if c==item.type_b:
        ...
    else if c==item.type_c:
        ...
    else:
        ...


func.go
//go言語にenum文がありませんので、const値で設定します。
type itype int
const (
    golang itype = iota
    type_a
    type_b
    type_c
)

func function(itype c){
    switch c {
    case type_a:
        ...
    case type_b:
        ...
    case type_c:
        ...
    default:
        ...
    }
}

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?