😕

私家版Hello, World!プログラム集(独学用)

2020/11/09に公開

前書き

拙作記事『プログラミング言語を独学で学び始める時のコツ』にて,サンプルコードは入力と出力をセットにして作成してから実行を確かめるというコツ(というよりは考え方)を示しました.Haskellを例にしましたが,じゃあ他のプログラミング言語の"Hello, World!"プログラムに相当するものはどうなるんだ,ということで,今回の考え方に基づく『最初のサンプルプログラム』を,いくつかのプログラミング言語で作成してみました.必要に応じて順次追加・修正していく予定です.

REPL標準装備の場合

先の記事に従うと,REPL(対話環境)を標準で備えている言語環境についてはHello, Worldプログラムに相当するものは不要ということになり,今回の記事で示す予定はありません.たとえば,スクリプト言語としては大変軽量・高速かつ高機能であるLuaは標準でREPLがあり,次のUNIXシェル上での実行例の通り,代入や配列,関数定義などの基本構文から確認していくことが可能です.

$ lua
Lua 5.3.3  Copyright (C) 1994-2016 Lua.org, PUC-Rio
> x = 10
> x
10
> x = { 10, 20 }
> x[1]
10
> x[2]
20
> function pair(x, y) return { x, y } end
> function first(a) return a[1] end
> function second(a) return a[2] end
> x = pair(pair(10, 20), pair(30, 40))
> second(x)
table: 0x19cdbd8
> first(second(x))
30
> (Ctrl+Dキーを入力)
$

なお,REPLによっては,実行結果を表示(評価)してくれない場合もありますので,その場合は伝統的な"Hello, World!"プログラムに沿って表示機能をまず覚える必要があります.ただ,表示機能はあくまで入出力機能の片方ですので,その後のサンプルプログラムの確認のためにも(REPLがない言語と同様に)入力機能を併せて覚えると,特に自学自習の独学の場合は効果的でしょう…というのが,先の記事の要約となります.

上記のLuaについては,以前のバージョンのREPLは実行結果がそのままでは表示されませんので,表示関数io.writeと併せて入力関数io.readを覚えると良いでしょう.

$ lua5.1
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
> x = 10
> io.write(x)
10> io.write(x, "\n")
10
> x = io.read()
20
> io.write(x + 30, "\n")
50
> (Ctrl+Dキーを入力)
$

【余談】Luaには,表示関数として別にprintがあり,様々な型の値を文字列に変換し,かつ,最後に改行します.これはどちらかというとデバッグ用であり,『Quick & Dirty』向きの確認用と言えます.通常の出力機能としては,標準入力やファイル入出力も扱うioライブラリのものを用いるとわかりやすいでしょう.

サンプルプログラム集

基本的には,空白を含む文字列を入力するとそれをそのまま表示する,一行文字列の入出力のみを行うものです.『最初のサンプルプログラム』としてのHello, World!プログラムにあやかった形となっており,数値や単語の入出力ではありません.

独学で学び始める時には,可能であれば(表示だけでなく)このようなサンプルの処理内容をまず覚えた方が良いだろうというのが,今回のサンプルプログラム集作成の目的です.特に,『かじったことがある』言語を学び直す場合にちょうど良いかもしれません.

C言語

#include <stdio.h>

int main(void)
{
  char i[256];
  fgets(i, 256, stdin);
  printf("%s", i);
  return 0;
}

C++

#include <iostream>
#include <string>
using namespace std;

int main(void)
{
  string i;
  getline(cin, i);
  cout << i << "\n";
  return 0;
}

Perl

my $i = <STDIN>;
print $i;

PHP

<?php
$i = fgets(STDIN);
echo $i;
?>

JavaScript(Webブラウザ版)

<!DOCTYPE html>
<html>
  <body>
    <form name="form1">
      <input type="text" name="t1" value="Hello, World!">
      <input type="button" value="OK" onclick="output()">
      <span id="s1">
    </form>
    <script>
      function output() {
        t1 = document.form1.t1;
        s1 = document.getElementById("s1");
        s1.textContent = t1.value;
      }
    </script>
  </body>
</html>

Go言語

package main
import ( "fmt"; "bufio"; "os" )
func main() {
  i := bufio.NewScanner(os.Stdin)
  if i.Scan() { fmt.Println(i.Text()) }
}

Rust

fn main() {
  let mut i = String::new();
  let s = std::io::stdin();
  let _ = s.read_line(&mut i);
  println!("{}", i.trim());
}

COBOL(GnuCOBOL自由形式)

IDENTIFICATION DIVISION.
  PROGRAM-ID. MYHELLO.

DATA DIVISION.
  WORKING-STORAGE SECTION.
    01 I PIC X(32).

PROCEDURE DIVISION.
  MAIN.
    ACCEPT  I FROM CONSOLE.
    DISPLAY I UPON CONSOLE.
    STOP RUN.

備考

更新履歴

  • 2020-11-09:初版公開(Lua,C,C++,Perl,PHP,JavaScript,Go,Rust,COBOL)

Discussion