プログラム言語 基本

プログラムの開始

namespace formtest
{
 public partial class myForm : Form
 {
  public myForm()
  {
   InitializeComponent();
  }
  
  private void myForm_Load(object sender, EventArgs e)
  {
   SubRoutin1();
   Boolean x = SubRoutin2();
  }
  
  private void SubRoutin1()
  { ~ }
  
  private Boolean SubRoutin2()
  {
    return true;
  }
  
 }
}

Public Class myForm

 Private Sub myForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  Call Subroutin1()
  Dim x As Boolean = SubRoutin2()
 End Sub
  ~
 Private Sub Subroutin1()

 End Sub

 Private Function SubRoutin2() As Boolean
  Return True
 End Function

End Class

int main(array<System::String ^> ^args)
{
  ~
  
  return 0;
}

コンパイル済みのクラスファイル(.class)を実行する
※コンパイル方法については「JAVA 重要用語/javac.exe」参照

> java (クラスファイル名) (引数1) (引数2)
> java Base a b c
※実行時のオプションについては「JAVA 重要用語/java.exe」参照

※Base.java
public class Base {
  public static void main(String[] args) {
    String prm1 = args[0];
    ⇒prm1 : a
    String prm2 = args[1];
    ⇒prm1 : b
    String prm3 = args[2];
    ⇒prm1 : c
  }
}

エントリーポイント:プログラムが最初に実行される場所
アクセス修飾子:public
静的属性:static
メソッド名:main
引数:String[] ※変数名は変更可

<!DOCTYPE html>
<html lang="ja">
 <head>
  //headタグ内に書く
  //HTML全体の読み込みが終了するまで実行されない

  <script type="text/javascript">
   ~
  </script>
 </head>
 <body>
   //bodyタグ内に書く
   //bodyの読み込み途中で実行される

   <script type="text/javascript">
    function SubRoutine1(){
     window.alert(‘SubRoutine1()’);
    }
    SubRoutine1(); 
    //⇒Hello World.;
   </script>
   
   HTML上に表示する文字<br/>
   //bodyタグ内に書く(2回目)

   <script type="text/javascript">
    ~
   </script>
 </body>
</html>
<!DOCTYPE html>
<html lang="ja">
 <head>
 </head>
 <body>

  <?php
   ~
  ?>
 </body>
</html>
ターミナルで直接実行
$ perl -e "print ‘hello world!’;"
⇒hello world!

$env perl ~
※システムPerlではなくユーザーPerlを実行する

ターミナルから外部のPerlプログラムを実行
print "Hello world!\n";
をテキストエディタで作成、hello.plとして保存しておく。

$ perl hello.pl
⇒hello world!

Perlプログラム内でのコマンド実行
system ~

perlのプログラム中からperlのプログラムを実行する
system "perl test.pl"

プログラムの終了

// フォームの終了
this.Close();

// Application.Runで開始されたスレッドを終了する。
Application.Exit();

// 現スレッドのみ終了する。
Application.ExitThread();

サブルーチン

別名:関数、プロシージャ

//呼び出し元
SubRoutin1();

//呼び出し先
void SubRoutin1()
{
  ~
}

//呼び出し元
SubRoutin2(x:5, y:10);
SubRoutin2(5, 10);

//呼び出し先
void SubRoutin2(int x, int y)
{
  ~
}

//呼び出し元
int z = SubRoutin3(x:5, y:10);
int z = SubRoutin3(5, 10);

//呼び出し先
int SubRoutin3(int x, int y)
{
 return x + y;
}

params : 同じ型の値をいくつでも受け取れる
複数の引数の最後である必要あり

static void Main(string[] args)
{
  myFunc(5, "test", 1, 2, 3, 4, 5);
}

static void myFunc(int prmInt, String prmStr, params int[] myArray){
  int i = prmInt;
  String s = prmStr;

  int total = 0;
  foreach (int elm in myArray) {
    total += elm;
  }
  Console.WriteLine(total);
}

引数の初期値
static void Main(string[] args)
{

 MyClass.MyFunc();
 →Hello
 MyClass.MyFunc(name:@"開発者");
 →Hello 開発者さん
 MyClass.MyFunc(age:30);
 →Hello 30歳
 MyClass.MyFunc(name:@"開発者", age: 30);
 →Hello 開発者さん 30歳
}

void MyFunc(string name = null, int age = -1)
{
 if (name != null) Console.WriteLine("{0}さん", name);
 if (age != -1) Console.WriteLine("{0}歳", age);
 Console.WriteLine("Hello\n");
}

呼び出し元
Call SubRoutine()

呼び出し先
Private Sub SubRoutine()
  ~
End Sub

呼び出し元
call SubRoutine(prm1:=x, prm2:=y)
call SubRoutine(x, y)

呼び出し先
Private Sub SubRoutine(ByVal prm1 As Integer, ByRef prm2 As String)
  ~
End Sub

呼び出し元
Dim z As Integer = SubRoutine(prm1:=x, prm2:=y)
Dim z As Integer = SubRoutine(x, y)

呼び出し先
Private Function SubRoutine(ByVal prm1 As Integer, ByRef prm2 As String) As Integer
  ~
  Return ~
End Function

~.h
int subRoutin1(int prmInt);
void subRoutin2(int prmInt);
※プロトタイプ:関数の定義をヘッダーファイルに記載する

※~.cpp
#include "~.h"

int main(array<System::String ^> ^args)
{
  Console::WriteLine(subRoutin1(10));
  subRoutin2(10);
  
  return 0;
}

int subRoutin1(int prmInt)
{
  return prmInt;
}

void subRoutin2(int prmInt)
{
  Console::WriteLine(prmInt);
  return;
}

public static void main(String[] args) {
  呼び出し元
  myFunc(5,"test",1,2,3,4,5);
}

呼び出し先
※「…」同じ型の値をいくつでも受け取れる
複数の引数の最後である必要あり

static int myFunc(int prmInt, String prmStr, int myArray){
  int i = prmInt;
  String s = prmStr;
  
  int total = 0;
  for (int elm : myArray){
    total += elm;
  }
  return total;
  ⇒ total : 15
}

// ① が呼ばれる。①が定義されていなければ②が呼ばれる
myFunc(5, 5);

void myFunc(int a, int b){ ~ } // ①
void myFunc(int myArray){ ~ } // ②

function SubRoutine1(){
 window.alert(‘Hello World.’);
}
SubRoutine1();
//⇒Hello World.;

function SubRoutine2(){
 return 5;
}
var x = SubRoutine2();
//x = 5;

function SubRoutine3(prm1, prm2){
 return prm1 + prm2;
}
var x = SubRoutine3(0, 1);
//x = 1;

名前付き引数
function myFunction(params){
  return params.prm1 + params.prm2;
}

名前付き引数(デフォルト値付き)
function myFunction(params){
  if (params.prm1 == undefined){ params.prm1 = 0; }
  if (params.prm2 == undefined){ params.prm2 = 0; }
  
  return params.prm1 + params.prm2;
}

var i = myFunction( {prm1:2 , prm2:2} );
var i = myFunction(1,1); は通らない
※名前付き引数が定義されたサブルーチンには名前なし引数を渡せない

//匿名関数1(関数オブジェクト)
var func1 = function(prm1,prm2){return prm1 + prm2;};
var y = func1(1,2);
// y = 3

//匿名関数2(関数オブジェクト)
var func2 = new Function('prm1','prm2','return prm1 + prm2;');
var z = func2(3,4);
// z = 7

//即時関数
( function(){window.alert('Hello World.');} ).call(this);
// ⇒ Hello World.

getprice(1, "Books", "PHP");
getprice(2, "DVD", "html");

function getprice($index, $searchIndex, $keywords)
{
  $i = $index;
  $j = $searchIndex;
  $s = $keywords;
}

引数の初期値
function sample( $prm1, $prm2 = 0, $prm3 = '~' ) {
 ~
}

外部の関数に引数を渡す場合
$ php test.php 1 2

※test.php
<?php
 引数の個数
 $cnt = $argc;
 $cnt:2
 
 引数の配列
 $prm1 = $argv[1];
 $prm1:1
 $prm2 = $argv[2];
 $prm2:2
?>

引数なし
Test1();

sub Test1 {
 ~
}

引数あり
my $x1 = TEST1(1,2);
print "$x1\n";
⇒3

my $x2 = TEST2(3,4);
print "$x2\n";
⇒7

my $x3 = TEST3(5,6);
print "x3\n";
⇒11

my $x4 = TEST4(7,8);
print "x4\n";
⇒15

sub TEST1{
  my $prm1 = $_[0]; #第一引数の取得
  my $prm2 = $_[1]; #第二引数の取得
  return($prm1 + $prm2);
}

sub TEST2{
  my ($prm1, $prm2) = @_; #第一&二引数の取得
  return($prm1 + $prm2);
}

sub TEST3{
  # ローカル変数宣言
  my local($x) = $_[0]; #第一引数の取得
  my local($y) = $_[1]; #第二引数の取得
  my local($z) = $x + $y;
  return($z);
}

sub TEST4{
  my $prm1 = shift; #第一引数の取得
  my $prm1 = shift @_; の略
  my $prm2 = shift; #第二引数の取得
  return($prm1 + $prm2);
}

複数の返り値を持つサブルーチン
sub fnDouble {
  return 5, 10;
}

my ( $value1 , $value2 ) = fnDouble;
⇒ $value1 : 5 / $value2 : 10

省略した書き方
TEST(引数1, 引数2);

TEST 引数1 => 引数2;
※ ()の省略、「,」の代わりに「=>」を使用

外部ファイル読み込み

オブジェクト指向: 名前空間」参照

宣言文

VB.NETで言うOption Explicitは常にOn
VB.NETで言うOption Strictは常にOn
データ型宣言の強制
Option Explicit On (またはOff)
厳密な構文チェック
Option Strict On (またはOff)
厳密な構文チェック
use strict;
※古いブラウザ(IE9以前)では単なる文字列として扱われる場合あり
厳密な構文チェック
use strict;
警告表示
use warnings;

#!/user/bin/env perl
↑を宣言する事で、
./perl ~.pl
と入力するだけでperlが実行される。

use feature ‘:5.10’;
※5.10の新しい機能を使う宣言

Dumber関数の使用宣言
use Data::Dumper;
my %hash = (
 ~
);
print Dumper(%hash);

文字コード:utf8の使用宣言
use utf8;

文字コード:shift-jisの使用宣言
use encoding "cp932";

コメント

1行
// コメント

複数行
/*
コメント
*/

XML説明文
/// <summary>
/// クラスの説明文
/// </summary>
public class TestClass
{
  /// <summary>
  /// サブルーチンの説明文
  /// </summary>
  /// <param name="val1">
引数の説明文1
</param>
  /// <param name="val2">
引数の説明文2
</param>
  /// <returns>戻り値の説明文</returns>
  public static int SubRoutine(int val1, int val2)
  {
    ~
  }
}

1行
' コメント

C#と同じ
1行(Razor)
@* コメント *@

複数行(Razor)
@*
コメント
*@

コードブロック中のコメント
@{
 //コメント
 /*
 コメント
 */
}

1行
//コメント

複数行
/*
コメント
*/

1行
<!– — コメント — –>

複数行
<!– —
コメント
— –>

1行
/* コメント */

複数行
/*
コメント
*/

1行
//コメント

複数行
/*
コメント
*/

1行
#コメント

複数行
=pot
コメント
=cut

終了行
__end__
コメント

ファイル

ソースファイル
~.Java
Javaプログラムを記述するファイル

Javaクラスファイル
~.class
コンパイラによって自動生成されるクラスファイル
(ソースファイルにクラスが定義されている場合)

JARファイル
~.jar
Javaプログラムファイル群をまとめたZip形式圧縮ファイル
解凍はJVMが自動で行う
複数のクラスファイルを1つのJARファイルとして圧縮、
クラスパス環境変数にパスを定義する事でクラスを参照という方法でも使う

WARファイル
・ jspファイル
・ htmlファイル
・ classファイル
・ jarファイル
・ xmlファイル
等のWEBアプリケーションに必要なファイルをまとめたアーカイブファイル(拡張子:war)
Tomcatのアプリケーションディレクトリに配置すると、Tomcatの再起動により自動的に展開される