HEXA BLOG

プログラム

HEXA BLOGプログラム2016.11.15

2つの言語を知ること

ハローハロー

 

最近はポルノグラフィティの新曲
真っ白な灰になるまで、燃やし尽くせ
をヘビロテしている某(なにがし)です

 

今回はプログラマらしく、軽くプログラミングネタを書きますね。

 

プログラマはたいてい複数のプログラミング言語を扱います。
何故なら、どんな場面でもこれひとつあればいい
という万能な言語が存在しないからですね。
銀の弾丸などない、という言葉もあります。

 

言語ごとに個性があって、得意不得意があります。
なので、いろんな言語を知ることは、
できることの幅が広がっていいんじゃないかと思います

 

そういう自分も学生の頃からいろいろな言語に触れてきたものですが、
中でも気に入っているのがC#Pythonです。

 

こうして複数の言語に触れてみると、
共通点や相違点がわかってきます

 

Pythonは文字列処理が簡単に済むのでよく使うのですが、
例えば、下記のようなプログラムが書けます。

# 'abc' と 'def' の連結
'abc' + 'def'

# 前後の空白文字の削除
'  abc  '.strip()

# カンマ区切りで分割して文字列リストを得る
'abc,def'.split(',')

# カンマ区切りで文字列リストを連結
','.join(['abc', 'def'])

# 小文字にする
'ABCDEF'.lower()

これと同じことをC#で書いてみると、だいたい似たような感じになります。

// "abc" と "def" の連結
var s = "abc" + "def";

// 前後の空白文字の削除
"  abc  ".Trim();

// カンマ区切りで分割して文字列リストを得る
"abc,def".Split(',');

// カンマ区切りで文字列リストを連結
string.Join(",", new string[] {"abc", "def"});

// 小文字にする
"ABCDEF".ToLowerInvariant();

決まりごとがあるわけではないのですが、
よくある処理はだいたい名前が伝統的に決まっていて、
それを知っていると他の言語に移っても、すぐにそれを利用できたりします。

 

ところで、Pythonを見ていると、
インスタンスメソッドが充実していて、記述がとても簡潔ですね。スマート

 

C#でも、Pythonみたいに書けたらスッキリするのになぁ。

public static class StringExtension
{
	public static string Join(this string separator, string[] values)
	{
		return string.Join(separator, values);
	}
}

",".Join(new []{"abc", "def"});

拡張メソッドという機能でなんかそれっぽいのできました。
既に定義されている型に対して、こうした柔軟な拡張ができるC#は面白いと思います。

 

ただ、言語ごとに流儀というものがありますので、
このぐらいのことで自分の美徳を優先して、チーム開発に取り込むのは良くないですね

 

それでも、こういうことができるよという発想があると、いつか良い実装アイデアが思い浮ぶかもしれません

 

最近、とあるプロジェクトで、
桁数の多い数字をカンマ区切りで表示することが多かったので、こういうの作ってました。

public static class IntegerExtension
{
	public static string toCommaSeparatedString(this int value)
	{
		return value.ToString("N0");
	}
	public static string toCommaSeparatedString(this long value)
	{
		return value.ToString("N0");
	}
	public static string toCommaSeparatedString(this uint value)
	{
		return value.ToString("N0");
	}
	public static string toCommaSeparatedString(this ulong value)
	{
		return value.ToString("N0");
	}
}

// "10,000,000,000"という文字列を得る
10000000000.toCommaSeparatedString();

すっっっっごい地味なんですが、この記述スタイル好きです

 

はい、好みの問題でもあります

 

それでも、このIntegerExtensionというクラス名を覚える必要がない上に、
とりあえず整数に”to”つけたらIDEが補完してくれるので、実装スピードが上がるメリットがあります。

 

なんだか思ったよりも長い文章になってしまいましたが、
いろんな言語を知ることは、直接その言語を使う場面でなくても、十分武器になりうるよ、という話でした。

 

Pythonに興味ありましたら、ヘキサブログの過去記事もいくらかありますので見てみてください

 

それでは。

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE