プログラム言語 基本

プログラムの開始

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>
 <body>

  <?php
   ~
  ?>
 </body>
</html>
インタラクティブシェル起動
python

インタラクティブシェル終了
exit()

インタラクティブ(対話的)シェル
Pythonを実行する為のインタプリタ機能を持つシェル。
対話的にPythonを実行できる

インタラクティブシェルを使用せずにPythonを実行する場合は、
Pythonソースファイル(~.py)をインタプリタが実行する

Pythonソースファイルを実行
python test.py
assert文を無効化して実行
python -O test.py

function method(name: string) : string {
 return `hello ${name}`;
}

method(“aaa”);

<!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>
ターミナルで直接実行
$ 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();

インタラクティブシェル起動
python

インタラクティブシェル終了
exit()

強制終了
import sys

sys.exit() #コンソールにて「echo $?」 → True
sys.exit(0) #コンソールにて「echo $?」 → True
sys.exit(1) #コンソールにて「echo $?」 → False
sys.exit(‘error’) #コンソールにて「echo $?」 → False

メソッド(サブルーチン)

別名:関数、プロシージャ
匿名関数、無名関数、即時関数

function test(
 a: int,
 b: string,
 オプション引数(呼び出し側は省略可)
 c? TestClass) {

 指定されなかった場合は5555
 const d = c || 5555;
}

サブルーチン
def test1(num):
  return num

戻り値指定(省略可)
def test1(num) -> int:

引数データ型指定(省略可)
def test1(num: int):

サブルーチンの実行
test(1)

可変長引数
test(555, a1=555, a2=666)

def test(*args, **kwargs):
  print(args) → (555)
  print(args[0]) → 555
  print(kwargs) → (‘a1’:555, ‘a2’:666)
  print(kwargs.get(‘a1’, ”)) → 555
  print(kwargs.get(‘a2’, ”)) → 666
  print(kwargs.get(‘a3’, ‘ccc’)) → ccc

サブルーチン(複数の戻り値)
def test2(num):
  return num, num+1, num+2

サブルーチンの実行
複数の戻り値を同時取得
a, b, c = test2(1)

関数を変数に格納して実行
func = test2

サブルーチンの実行
a, b, c = func(100)

サブルーチン
def func1(n):
  return n*2

print(func1(5))
10

ラムダ式
func2 = lambda x : x * 2

print(func2(5))
10

ラムダ式をそのまま実行
print((lambda x : x * 2)(5))
10

//呼び出し元
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;
}

PHP7.1~
<?php
declare(strict_types=1);

引数、戻り値にデータを指定できる
function func(float $a, float $b) : array {
 return [$a + $b];
}

引数の初期値
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__
コメント
rem ~
未分類

前の記事

辞書