Chandler@Berlin -41ページ目

Chandler@Berlin

ベルリン在住

日本語の名前を英語(ドイツ語)で表記する際にはいろいろな方法があり,混乱する.たとえば,村上春樹は,

1. Murakami Haruki
2. Haruki Murakami
3. Haruki MURAKAMI
4. Murakami, Haruki

などと表現できる.私にとって名前を英語表記にした時点でそれは日本語ではなく(私の母がその場合私の名前を読めないことでもあるし),発音も既にアメリカ流がドイツ流かで異なってくるので,「これは近似の一種」と考えてあまり気にしない.多分,個人的に,私の名前自体が例えば Hiroshi (宏,浩,弘,洋,・・・)のように同音異字のものがあり,Latin 文字で書いた時点で意味がなくなることに関係しているのだろう.千と千尋の神隠しという映画では同じ文字が異なる読み方をすることを上手く利用しているが,これは簡単には英語に翻訳できないことであって,日本語を話されない方々には気がつかれないことも多いかと思う.

それでも私が自分の名前を表記する際には一点だけ,どちらが名字でどちらが名前なのかを明確にできればと思う.おそらく 2 の場合が default で認識されるが,実はこれはそんなに明確に意思表示しているというわけでもないようだ.

ヨーロッパでは,

3. Haruki MURAKAMI
4. Murakami, Haruki

の表記によってより明確に名字を示すことができる.

しかし,3 のように大文字を名字と認識してくれるのは場合は限られている.確か本多勝一の本(今手元に本がなく,確かめられないのだが)でこのように書くべきだというものがあり,私はそれに従ってきた.ところが,ご存知の方も多いと思うが,大文字を書いてもアメリカでは名字とはほとんど認識されない.私はある会議で,「なぜ大文字を使うのか」と聞かれたことがあるが,それだけならばまだしも,ある教授に「あなたの名前は大文字で全部書くほど重要なんだね」とからかわれたりしたこともあって,私はおすすめしない.ただし,この手法はフランスやドイツでは一般に通じる.

4 の表記であるが,これはドイツの公文書で使われているものであり,フランス,アメリカなどでも通じる.そのためにこちらを使う方が良い気がする.しかし,私は実は,1 の表記を使っている.結局固有名詞なのだから,できるだけ日本語のものに近いのでいいのではないかと思うからである.どちらにせよ人と付き合う場合には説明が必要であるし,こう書くことで会話を始めることができたりする.コミュニケーションに有用であるためにこのように書くようにしているが,まあ,結局の所そんなに厳密に気にしているわけではない.

また,ドイツの公文書では様々な人達がいることに配慮してか,
first name
family name
とどこにどのように書くのか指定されていることが多いので,それに従えば良い.

ただし,3 の「名字を大文字で書く」表記が世界では一番通じない部類に入ることはもうちょっと学校とかで教えてもらってもいいんじゃないかなと思う.なぜかこの一番通じにくいものが,日本では一番使われているような気がする.


謝辞

ようやくネイティブでプロのライターに意見を伺うことができ,この話を書くことができました.Mike, Rachiel, Kelly に感謝します.

前回のクイズの解答である.この話は C++ の知識が必要です.

まずは,string の default constructor が何をしているかを見てみよう.すると,empty string を生成しており,1 という文字列は生成していない.コンストラクタは呼ばれているのだろうかと break pointを設定しても,実は呼ばれていないようだ.

middle() のラインを以下のように変更すると,

std::string prefix("->"), middle(""), postfix("<-");

思ったような出力,

Hi:-><-

が得られる.

ヒントは,middle() は以下のようになっていることである.

std::string middle();

ここまできたらわかった人もいるかもしれない.

さて私がどんな C++ の罠にはまったかを見てみよう.

1. これは string の object の定義ではなく,string を返す関数の宣言である.

2. したがって,cout 中の middle は関数への pointer を示す.

3. 関数が宣言されている以上,実装は不明であるが,関数への pointer はNULL ではないはず.(でなければ link で失敗して executable はできない.)

4. 暗黙の変換で,この関数への pointer は boolean になる.通常は pointer ならば hex で出力されるのだが,関数の declaration の場合にはそうではないらしい.

5. (C++ では真の boolean 型はなく,int で代用する.) NULL でない pointer は true になる.

6. (C++ では真の boolean 型はなく,int で代用する.) true は console に出力される場合には 1 となる.

さて,この一行にこれだけの罠がある.C++ の program は難しい.

謝辞

この素敵な C++ riddle を教えてくれた Peter に感謝します.
この話は C++ の知識が必要です.

私の同僚が時々 C++ のクイズを教えてくれる.今回もまた Peter からの問題だった.以下のプログラムをコンパイルして実行するとその結果はどうなるかというものだ.

#include <iostream>
#include <string>

int main()
{
std::string prefix("->"), middle(), postfix("<-");
std::cout << "Hi:" << prefix << middle << postfix << std::endl;

return 0;
}


結果は,

Hi:->1<-

となるはずである.真ん中に 1 が出ている.さて,これは何故かということになる.まあ,ちょっと考えてみて下さい.解答は次回に.