CodeZine(コードジン)

特集ページ一覧

突然ですがクイズです!-その1

Delphi、C++、Java、C#、PHP、Rubyの6言語の動作の違いをクイズで考察

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/03/13 14:00

この記事では、Delphi、C++、Java、C#、PHP、Rubyの6言語を取り上げ、同じような動作を記述していながら、結果が異なるケースを紹介し、言語ごとの挙動の違いを考察し、プログラミング言語に対する理解を深めます。

目次

はじめに

 職務上、さまざまなプログラミング言語を扱うことがあるのですが、言語によって文法や挙動の違いに戸惑ったり、うっかりミスをしたりすることがあります。でも、1つの言語だと当たり前に思ってしまうことも、複数の言語を並べることで、逆によく見えてくることもあります。この記事では、Delphi、C++、Java、C#、PHP、Rubyの6言語を取り上げ、同じような動作を記述していながら、結果が異なるケースを紹介し、言語ごとの挙動の違いを考察します。

 なお、この記事は、CodeGearブログに掲載されたクイズに正解とその解説を加えて再構成したものです。

最初のクイズ(変数のスコープ)

問題

 最初のクイズは、変数のスコープに関するものです。グローバル変数やstaticなメンバを使ったコードを6つの言語で書いてみましたが、1つだけ出力結果が違うものがありました。それはどれでしょうか?

Delphi
program Project1;
{$APPTYPE CONSOLE}
var 
  x: Integer;

procedure test;
begin
  Write(x);
end;

begin
  x := 1;
  test;
end.
C++
#include <iostream>

int x;

void test() {
  std::cout << ::x;
}

int main(int argc, char* argv[])
{
  ::x = 1;
  test();
  return 0;
}
Java
package project1;
public class Project1 {
  public static void test() {
   System.out.print(x);
  }
  public static void main(String[] args) {
    x = 1;
    test();
  }
  private static int x;
}
C#
namespace project1 {
public class Project1 {
  public static void test() {
    System.Console.Write(x);
  }
  public static void Main() {
    x = 1;
    test();
  }
  private static int x;
}
}
PHP5
<?php
global $x;

function test() {
  echo $x;
}

$x = 1;
test();
?>
Ruby
def test
  print $x
end

$x = 1
test
解説

 正解は「PHP」。

 PHPでは、期待した「1」は出力されません。それ以外の言語では正しく「1」が出力されます。Delphi/C++/Java/C#については特にうっかりミスを起こすことはないでしょう。Rubyでは、グローバル変数を使用する場合には、変数の先頭に「$」を追加する必要があります。PHPでは、変数のスコープは関数の中と外とで異なります。そのため、以下に示すコードのように、グローバル変数を利用する場合には関数の中でもglobalの宣言が必要になります。これで期待した「1」が出力されます。

function test() {
  global $x;
  echo $x;
}

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • EDN編集部(イーディーエヌ編集部)

    エンバカデロ・デベロッパーネットワーク(EDN)は、ソフトウェア開発者とデータベース技術者のための技術情報サイトです。Delphi、C++Builderをはじめとする開発ツールやER/Studioなどのデータベースツールに関連する技術記事、ビデオなどを提供しています。EDN編集部は、EDN記事と連携...

バックナンバー

連載:突然ですがクイズです!
All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5