SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

突然ですがクイズです!(AD)

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

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

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

この記事では、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;
}

次のページ
文字の長さ

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
突然ですがクイズです!連載記事一覧
この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2289 2008/08/20 13:35

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング