開発言語が異なるプロジェクトを掛け持ちした時って
自己紹介
はじめまして、今回の記事担当の須山と申します。
現在 私は、とあるお客様の所でWindchillやTeamcenter等 PDMのアドオン開発を行っています。
substringの第2引数って文字列長さ?終了文字のインデックス?
最初は業務に向いた話にしようか、業務以外(趣味等)に向いた話にしようか…
と考えましたが、今回は業務に向いた話にしたいと思います。
世の中にはいろいろなプログラミング言語があります。
こちらは、少し前の記事になりますが…
news.mynavi.jp
私が自分の業務でここ数年で使用した主な言語は
Java、C#、C++…等があります。
(他にも触ったことがあるものもありますが、最近はこんな感じです。)
C#とJavaとかはぱっと見似ているような気がしますが
同じように(似たように)書いたらちょっと思ったことと違ったりする場合もあります。
例えば、C#やJavaで文字列の一部を取得したい場合に substringを使用しますが
C#
ExampleCSharp1.cs
using System;namespace ExampleCSharp1
{
class Program
{
static void Main(string[] args)
{
string var0 = "iPX co.,ltd.";
string var1 = var0.Substring(4, 8);Console.WriteLine(var1);
}
}
}
Java
ExampleJava1.java
public class ExampleJava1 {
public static void main(String[] args) {
String var0 = "iPX co.,ltd.";
String var1 = var0.substring(4, 8);System.out.println(var1);
}
}
どちらも文字列は"iPX co.,ltd."、substringの引数は "4"と"8"ですが、実行すると以下のようになります。
同じような処理をしたいメソッドでも、C#とJavaで引数の意味が違うためこうなります。
(この場合 C#では開始文字インデックスと文字列長さ、Javaでは開始文字インデックスと終了文字インデックス)
他にも、文字列の比較にequalsと==を使用した場合に
C#
ExampleCSharp2.cs
using System;namespace ExampleCSharp2
{
class Program
{
static void Main(string args)
{
char var0 = { 'i', 'P', 'X' };
string var1 = "iPX";
string var2 = new string(var0);if (var1.Equals(var2))
{
Console.WriteLine("Equals is TRUE");
}
else
{
Console.WriteLine("Equals is FALSE");
}
if (var1 == var2)
{
Console.WriteLine("== is TRUE");
}
else
{
Console.WriteLine("== is FALSE");
}
}
}
}
Java
ExampleJava2.java
public class ExampleJava2 {
public static void main(String args) {
char var0 = { 'i', 'P', 'X' };
String var1 = "iPX";
String var2 = new String(var0);if (var1.equals(var2)) {
System.out.println("Equals is TRUE");
} else {
System.out.println("Equals is FALSE");
}
if (var1 == var2) {
System.out.println("== is TRUE");
} else {
System.out.println("== is FALSE");
}
}
}
(↑恐らく実際にこのような記述をすることは無いと思いますが、今回は例のためです。)
実行すると以下のようになります。
==の結果が異なります。
まとめ
同時期に開発言語が異なるプロジェクトを掛け持ちした時に
「あれ、この場合ってどうだっけ?」と思ったことがあったのでこれをお題に書いてみました。
(ちなみに、最初の例に文字列のsubstringを挙げたのは
たまに第2引数が、文字列長さ or 終了文字インデックス のどっちだっけ?と思うことがあったので例としました。)
参考
C#
String クラス (System)
https://msdn.microsoft.com/ja-jp/library/system.string(v=vs.110).aspx
Java
String (Java Platform SE 8)
http://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html