SlideShare a Scribd company logo
1 of 23
Download to read offline
© 2016 Embarcadero Technologies, Inc.
All rights reserved. Proprietary and confidential.
第6回
‟文字列 と オブジェクト„
シーズン2:プログラミング言語をやさしく覚えよう
C++Builderの部
2© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
Delphi / C++Builder Starter チュートリアルシリーズ
シーズン2 :2017年1月23日 ~ 3月27日 全 9 回
時間 :毎週 月曜 17 時 00分~17時 50分
Delphi 17時00分~17時20分 / C++Builder 17時30分~17時50分
ねらい :プログラミング言語をやさしく覚えよう
セミナー情報 : 下記のWebサイト
http://forms.embarcadero.com/starter-tutorial-webinar
シーズン2
第1回 2017年1月23日 シューティングゲームのプログラム
第2回 1月30日 変数と 型
第3回 2月6日 条件 とループ
第4回 2月13日 関数
第5回 2月20日 配列 と レコード
第6回 2月27日 文字列 と オブジェクト
第7回 3月6日 オブジェクト指向
第8回 3月13日 作ってみよう(1)
第9回 3月27日 作ってみよう(2)
3© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
第6回 「文字列 と オブジェクト」
 今日のねらい
• 文字列を知る
• 文字列の操作
• クラスとオブジェクトの概略を知る
 実施内容
• 文字列の型
• 文字列の代入とヘルパーについて
• クラスとオブジェクトの意味を知る
• クラスの定義とオブジェクトの宣言
4© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
無料版 C++Builder 10.1 Berlin Starter Edition 入手方法
• シリアルキーを知らせるメール内にも再ダウンロードリンク有
• ダウンロード、インストール参考ブログ:https://goo.gl/CCBNdx
エンバ
Web
製品
C++
Builder
Starter
バナー
登録 Get
 無料で使える開発環境をダウンロード
EDN*に登録済の方はEDNアカウントでダウンロード可
登録完了後、自動でインストーラーのダウンロード開始
インストール時にシリアルキーを入力
登録時のメールアドレスにシリアルキーが配信される
5© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
文字列の前に、文字の話
 コンピュータで扱う「文字」には、識別用の番号(=文字コード)が割り振られている
 同じ文字でも、割り振り方のルール(=符号化)によって割り当てられる番号が違う
 文字の集まりを文字集合という
 コンピュータの日本語環境では、日本語の文字集合としてJIS漢字やUnicodeが用いられる
 文字コードには Shift_JIS, UTF-8, UTF-16 が用いられる
文字集合
文字コード
JIS
Shift_JIS
Unicode
UTF-8
Unicode
UTF-16
A 0x41 0x41 0x0041
あ 0x82A0 0xE38182 0x3042
⌘ (未対応) 0xE28C98 0x2318
6© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
Unicode, Shift_JIS, ANSI, ASCII ??
 Unicode
• 世界中のすべての文字を統一的に扱う目的で策定された文字集合
• 英語、日本語だけではなく、韓国語、中国語などの多言語の文字集合を含む
 Shift_JIS
• Windows以前のパソコン/マイコンでJISの漢字を扱うための文字コードの一種
• Windows95までの日本語OSではShift_JISが標準的に用いられている
 ANSI
• Unicode以前の Windows で多言語を扱うための方法
• 「ASCII + 言語ごとの符号化」をコードページとして規定している(CP932 = Shift_JIS, CP949 = 韓国語、など)
• 各国語版WindowsでANSIという場合は、それぞれの初期言語のことを指す
 ASCII
• ASCIIは数値、アルファベット、記号を表現できる文字集合
• Shift_JISはASCIIをベースに拡張されている
7© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
Unicodeのコードの種類
 UTF-8
• ASCIIとの互換性を重視した可変長コードであり、アルファベットを1バイトで表す
• HTMLなどの文書はUTF-8を用いる(基本の制御構造がASCIIをベースとするため)
• ラテン文字は2バイト 、日本語、中国語、韓国語などは3バイト 、使用頻度の低い文字は4バイト
 UTF-16
• 世界中のすべての文字は2バイト = 65536個に収まると考えて設計された
• しかし実際には2バイトで収まらなかったので、使用頻度の低い文字は4バイトで表すことにした
• Windows API ではUTF-16が用いられるため、一部のアプリは UTF-16を Unicode と表記している
• UTF-16を用いると日本語を多用する文書では平均的にデータ量が少なくなる
 UTF-32
• すべての文字を4バイトで表す
• 固定長なので高速処理が可能だが、使用するデータ量が最も多くなる
8© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
参考: Windows のメモ帳アプリでの文字コード選択
この Unicode は UTF-16 のこと
9© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
文字列(型)
 String型 ( = UnicodeString型)
• UTF-16 で文字列を格納する型
• 新規に作るアプリケーションの文字列では String または UnicodeString型を用いる
 AnsiString型
• Shift_JISを取り扱う処理向け
 UTF8String 型
• AnsiString をベースとして UTF-8 を取り扱う型
• UTF-8 での入出力が必要な場合に用いる(ファイル入出力やインターネット経由の通信など)
10© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
文字集合と収録文字
 それぞれの文字集合で収録文字が違う
 収録文字数の多いコードから少ないコードへの変換は文字が失われることも
Unicode (UTF-8, UTF-16, UTF-32)
韓国語
中国語
日本語
AnsiString
codepage = 932(Shift_JIS)
ASCII
その他の言語…
11© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
 文字列相互代入によるデータの欠落の例
{
AnsiString strSJIS;
UTF8String strUTF8;
String strUTF16;
strSJIS = L"日本語"; // OK: "日本語"は Shift_JISで表せる文字である
strUTF8 = strSJIS; // OK: UnicodeにはすべてのShift_JISが含まれる
strUTF16 = strSJIS; // OK: UnicodeにはすべてのShift_JISが含まれる
strUTF16 = L"⌘"; // OK: Unicodeを扱う型にUnicode文字を代入している
strUTF8 = strUTF16; // OK: Unicode同士なので常に成功するが、データ形式の変換が生じる
strSJIS = L"𠮷野屋"; // NG: 「𠮷 = つちよし」はShift_JISに存在しない文字なので失われる
strSJIS = strUTF8; // NG: strUTF8 ="⌘" のため、Shift_JIS に代入すると失われる
}
文字列型の代入(コード例)
12© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
文字列型の文字を参照する
 文字列型[添字]で参照すると、文字列型の1つ1つの文字を参照できる
 C++Builderで使用できる文字列型のうち、Delphiと共通の文字列型の添字は 1 から始める
{
String strUTF16 = L“Hello C++Builder”;
// 文字列の各文字を配列として参照する
for ( int i = 1 ; i <= strUTF16.Length() ; i++ ) {
Memo1->Lines->Add(
Format( "i=%d: %s", ARRAYOFCONST(( i, strUTF16[i] )) ) );
}
}
13© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
文字列型の代入と連結
 文字列の代入には代入演算子 = 使用可能
 文字列の結合には + が使用可能
{
String str1 = L"Hello";
String str2 = L"C++Builder";
str1 = str1 + L" " + str2;
// "Hello C++Builder" と表示される
Memo1->Lines->Add(str1);
}
14© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
文字列型に対する操作
 文字列型には様々な操作方法が提供されている
• 一例を紹介
参考docwiki: http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.UnicodeString_Methods
操作 説明
= 文字列をコピーして代入する
+ 文字列を連結する
== 文字列を比較して等しいかどうかを返す
IsEmpty 文字列が空(文字を含んでいない)かどうかを返します。
Length 文字列の長さを返す
Format, printf 書式文字列および引数の組み合わせから文字列を生成する
UpperCase, LowerCase すべて大文字、または小文字に変換した文字列を返す
Trim, TrimLeft, TrimRight 前や後ろのスペースを除いた文字列を返す
{
String str = L" [Delphi/C+Builder] ";
str.UpperCase(); // 大文字に変換
str.LowerCase(); // 小文字に変換
str.Trim(); // 両端の空白を削除
str.TrimLeft(); // 文字列の前の空白を削除
str.TrimRight(); // 文字列の後ろの空白を削除
}
15© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
Format関数
 設定した書式に基づいて、一連の引数を文字列化する関数
参考Docwiki: http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.SysUtils.Format
// Formatの書式
Format(“文字列および書式”, ARRAYOFCONST((文字列に組みこむデータをカンマで区切って連ね
る)) );
{
String strWeather, strOutput;
int iTemparture;
strWeather = L”雨";
iTemparture = 20;
//Formatはこんな感じで使えます
strOutput = Format(
L”明日の天気は %s 、気温は %d 度になるでしょう", ARRAYOFCONST(( strWeather, iTemparture ))
);
Memo1->Lines->Add( strOutput );
}
16© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
クラス
 クラスとは「ユーザが定義した型」と「型に対する操作」を組み合わせたもの
// クラスの例
class TZipCode {
public: // メンバ変数。public宣言でクラス外から操作可能
int ZipCode;
String Pref;
String City;
String Area;
// クラスに紐づく関数(メンバ関数)の宣言
String getFullAddress();
};
// 都道府県名 + 市区町村名 + 町域名を連結して返す処理
String TZipCode::getFullAddress() {
return Pref + " " + City + " " + Area;
}
// クラスの実体(オブジェクト)を作り、メンバを初期化する
TZipCode zipdata = { 1120004, L"東京都", L"文京区", L"後楽" };
// メンバ関数の実行はオブジェクトに対する操作である
zipdata.getFullAddress();
// クラスを使わない例
struct SZipCode {
int ZipCode;
String Pref;
String City;
String Area;
};
// 関数宣言部
String getFullAddress( SZipCode zipCode );
// 都道府県名 + 市区町村名 + 町域名を連結して返す処理
String getFullAddress( SZipCode zipCode ) {
return zipCode.Pref + " " + zipCode.City + " " + zipCode.Area;
}
// 構造体の変数を作り、初期化する
SZipCode zipdata = { 1120004, L"東京都", L"文京区", L"後楽" };
// 関数名だけでは SZipCode との関連付けが分かりづらい
getFullAddress( zipdata );
17© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
クラスの特徴
 データと操作が紐付いている
• struct(構造体)の場合はデータ型と操作が紐付いておらず、型が一致する限りは無制限に操作できる
• クラスの場合は操作(メンバ関数)を適切に実装することで安全な操作を提供できる
 データの隠蔽
• クラスのメンバ変数はクラスの外から参照できない
• クラスの中からは隠蔽されたデータを自由に参照できる
• クラス外から参照させたい場合は public 宣言する
 クラスの継承(詳細は次回で説明)
• あるクラスを基本の共通の型(親クラス)とし、追加のデータ型や操作をつけた「派生クラス」を定義できる
• 派生クラスは元の型の特徴を引き継ぐ(継承)
• 例: 親クラス = 自動車 = 動力源を内蔵し、レールや架線によらず運転する車(ただし原付を除く)
• この親クラスから、用途の違い(自家用、トラック、バス、タクシー、消防車、救急車など)で派生クラスを定義できる
• ただしいずれの派生クラスも、親クラスの定義を含んでいる(継承している)
18© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
クラスの実装の基本形
class クラス名 {
private:
// クラス内だけで使う変数や関数の宣言
public:
// クラス外から利用できる変数や関数の宣言
戻り値の型 何かのメンバ関数( … );
// 特別な意味を持つメンバ関数の宣言
クラス名( … ); // クラスと同名の関数は、オブジェクトを生成する時に実行(コンストラクタ)
~クラス名(); // クラス名に ~ が付く関数はオブジェクトの破棄時に実行(デストラクタ)
};
クラス名::クラス名( int Z, String P, C, A ) {
// オブジェクト生成時の初期化処理を書く
}
クラス名:: ~クラス名() {
// 破棄時の終了処理を書く。クラスの操作に伴って動的生成したオブジェクトは、ここで確実に捨てる
}
戻り値の型 クラス名::何かのメンバ関数() {
…
}
19© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
クラスの実装例
class TZipCode {
private: // クラス内だけで使う変数や関数の宣言。変数は特に理由がある場合を除いて private 宣言する。
int ZipCode;
String Pref;
String City;
String Area;
public: // クラス外から利用できる変数や関数の宣言。外部との相互の受け渡しが必要な変数のみ public 宣言する。
String getFullAddress();
// 特別な意味を持つメンバ関数の宣言
// クラスと同名の関数は、オブジェクトの生成時に実行(コンストラクタ)
TZipCode( int ZipcCode, String Prev, String City, String Area );
// クラス名に ~ が付く関数はオブジェクト破棄で実行(デストラクタ)
TZipCode();
};
TZipCode::TZipCode( int Z, String P, String C, String A ) {
// オブジェクト生成時の初期化処理を書く
ZipCode = Z; Pref = P; City = C; Area = A;
}
TZipCode::~TZipCode() {
// 破棄時の終了処理を書く。クラスの操作に伴って動的生成したオブジェクトは、ここで確実に捨てる
}
String TZipCode::getFullAddress() {
return Pref + " " + City + " " + Area;
}
20© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
クラスの利用例
{
// クラスのインスタンスを new で確保する例
// データはアプリケーション共通の領域に作られる
TZipCode *zipdata = new TZipCode( 1120004, L“東京都”, L“文京区”, L“後楽” );
// new で確保した場合は、メンバ関数やメンバ変数への参照は -> で行う
Memo1->Lines->Add( zipdata->getFullAddress() );
// new した場合は不要になった時点で必ず delete する。
delete zipdata;
}
{
// 実行中の関数やブロック用の領域に確保する例
TZipCode zipdata2( 1120004, L“東京都”, L“文京区”, L“後楽” );
// メンバ関数やメンバ変数への参照は . で行う
Memo1,Lines.Add(zipdata2.getFullAddress() );
// 確保したインスタンスは関数やブロックを抜けるときに破棄される
}
21© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
本日のセミナー内容は
弊社ブログに掲載予定
[コミュニティ]
↓
[日本人ブログ]
実施内容の再視聴
 皆さんが見ているWebページの下に、順次アップロード
 エンバカデロWebサイト : http://forms.embarcadero.com/starter-tutorial-webinar
 [リソース] – [イベント]の「Delphi / C++Builder Starter チュートリアルシリーズ」ページ
 実施内容サマリー
• Community embarcadero (コミュニティ エンバカデロ)にWebリンク、サンプルコード情報等
http://community.embarcadero.com/
「エンバカデロ」で検索
22© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
第6回 「文字列 と オブジェクト」
 今日のねらい
• 文字列を知る
• 文字列の操作
• クラスとオブジェクトの概略を知る
 実施内容
• 文字列の型
• 文字列の代入とヘルパーについて
• クラスとオブジェクトの意味を知る
• クラスの定義とオブジェクトの宣言
23© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
 次回のC++Builderパートは
3月6日(月)17:30より
“オブジェクト指向 „

More Related Content

What's hot

フィボナッチ数列の作り方
フィボナッチ数列の作り方フィボナッチ数列の作り方
フィボナッチ数列の作り方
Tomoya Kawanishi
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 
関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013
Esehara Shigeo
 

What's hot (19)

Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカー
 
Javaクラスファイルの読み方
Javaクラスファイルの読み方Javaクラスファイルの読み方
Javaクラスファイルの読み方
 
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__
 
フィボナッチ数列の作り方
フィボナッチ数列の作り方フィボナッチ数列の作り方
フィボナッチ数列の作り方
 
Inside FastEnum
Inside FastEnumInside FastEnum
Inside FastEnum
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
JavaScript 非同期処理 入門
JavaScript非同期処理 入門JavaScript非同期処理 入門
JavaScript 非同期処理 入門
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
C#や.NET Frameworkがやっていること
C#や.NET FrameworkがやっていることC#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
 
20170131 python3 6 PEP526
20170131 python3 6 PEP526 20170131 python3 6 PEP526
20170131 python3 6 PEP526
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013
 
Vim入門 20130210
Vim入門 20130210Vim入門 20130210
Vim入門 20130210
 
Erlangご紹介 websocket編
Erlangご紹介 websocket編Erlangご紹介 websocket編
Erlangご紹介 websocket編
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
Study Swift
Study Swift Study Swift
Study Swift
 

Viewers also liked

Viewers also liked (13)

Energía eléctrica en españa (1)
Energía eléctrica en españa (1)Energía eléctrica en españa (1)
Energía eléctrica en españa (1)
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第1回 ‟シューティングゲームのプログラム„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第1回 ‟シューティングゲームのプログラム„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第1回 ‟シューティングゲームのプログラム„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第1回 ‟シューティングゲームのプログラム„
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
 
Matematica 3er grado (1)
Matematica 3er grado (1)Matematica 3er grado (1)
Matematica 3er grado (1)
 
Aritmetica 6to grado (2)
Aritmetica 6to grado (2)Aritmetica 6to grado (2)
Aritmetica 6to grado (2)
 
Cuatro operaciones 6° primaria
Cuatro operaciones 6° primariaCuatro operaciones 6° primaria
Cuatro operaciones 6° primaria
 
Conjuntos 5° primaria
Conjuntos 5° primariaConjuntos 5° primaria
Conjuntos 5° primaria
 
Conjuntos 4° rm
Conjuntos 4° rmConjuntos 4° rm
Conjuntos 4° rm
 
Cv Consultoría ILM
Cv Consultoría ILMCv Consultoría ILM
Cv Consultoría ILM
 
Uso de las mayúsculas
Uso de las  mayúsculasUso de las  mayúsculas
Uso de las mayúsculas
 
Nvidia shield tv android
Nvidia shield tv androidNvidia shield tv android
Nvidia shield tv android
 
Animales Domésticos
Animales DomésticosAnimales Domésticos
Animales Domésticos
 
Junkbots 2017
Junkbots 2017Junkbots 2017
Junkbots 2017
 

Similar to 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„

Similar to 【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„ (20)

【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
 
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
 
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 
ECMAScript没proposal追悼式
ECMAScript没proposal追悼式ECMAScript没proposal追悼式
ECMAScript没proposal追悼式
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
 
flow による型のある世界入門
flow による型のある世界入門flow による型のある世界入門
flow による型のある世界入門
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第7回 「オブジェクト指向 」
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第7回 「オブジェクト指向 」【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第7回 「オブジェクト指向 」
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第7回 「オブジェクト指向 」
 
C#勉強会
C#勉強会C#勉強会
C#勉強会
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web games
 

【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„

  • 1. © 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. 第6回 ‟文字列 と オブジェクト„ シーズン2:プログラミング言語をやさしく覚えよう C++Builderの部
  • 2. 2© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp Delphi / C++Builder Starter チュートリアルシリーズ シーズン2 :2017年1月23日 ~ 3月27日 全 9 回 時間 :毎週 月曜 17 時 00分~17時 50分 Delphi 17時00分~17時20分 / C++Builder 17時30分~17時50分 ねらい :プログラミング言語をやさしく覚えよう セミナー情報 : 下記のWebサイト http://forms.embarcadero.com/starter-tutorial-webinar シーズン2 第1回 2017年1月23日 シューティングゲームのプログラム 第2回 1月30日 変数と 型 第3回 2月6日 条件 とループ 第4回 2月13日 関数 第5回 2月20日 配列 と レコード 第6回 2月27日 文字列 と オブジェクト 第7回 3月6日 オブジェクト指向 第8回 3月13日 作ってみよう(1) 第9回 3月27日 作ってみよう(2)
  • 3. 3© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp 第6回 「文字列 と オブジェクト」  今日のねらい • 文字列を知る • 文字列の操作 • クラスとオブジェクトの概略を知る  実施内容 • 文字列の型 • 文字列の代入とヘルパーについて • クラスとオブジェクトの意味を知る • クラスの定義とオブジェクトの宣言
  • 4. 4© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp 無料版 C++Builder 10.1 Berlin Starter Edition 入手方法 • シリアルキーを知らせるメール内にも再ダウンロードリンク有 • ダウンロード、インストール参考ブログ:https://goo.gl/CCBNdx エンバ Web 製品 C++ Builder Starter バナー 登録 Get  無料で使える開発環境をダウンロード EDN*に登録済の方はEDNアカウントでダウンロード可 登録完了後、自動でインストーラーのダウンロード開始 インストール時にシリアルキーを入力 登録時のメールアドレスにシリアルキーが配信される
  • 5. 5© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp 文字列の前に、文字の話  コンピュータで扱う「文字」には、識別用の番号(=文字コード)が割り振られている  同じ文字でも、割り振り方のルール(=符号化)によって割り当てられる番号が違う  文字の集まりを文字集合という  コンピュータの日本語環境では、日本語の文字集合としてJIS漢字やUnicodeが用いられる  文字コードには Shift_JIS, UTF-8, UTF-16 が用いられる 文字集合 文字コード JIS Shift_JIS Unicode UTF-8 Unicode UTF-16 A 0x41 0x41 0x0041 あ 0x82A0 0xE38182 0x3042 ⌘ (未対応) 0xE28C98 0x2318
  • 6. 6© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp Unicode, Shift_JIS, ANSI, ASCII ??  Unicode • 世界中のすべての文字を統一的に扱う目的で策定された文字集合 • 英語、日本語だけではなく、韓国語、中国語などの多言語の文字集合を含む  Shift_JIS • Windows以前のパソコン/マイコンでJISの漢字を扱うための文字コードの一種 • Windows95までの日本語OSではShift_JISが標準的に用いられている  ANSI • Unicode以前の Windows で多言語を扱うための方法 • 「ASCII + 言語ごとの符号化」をコードページとして規定している(CP932 = Shift_JIS, CP949 = 韓国語、など) • 各国語版WindowsでANSIという場合は、それぞれの初期言語のことを指す  ASCII • ASCIIは数値、アルファベット、記号を表現できる文字集合 • Shift_JISはASCIIをベースに拡張されている
  • 7. 7© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp Unicodeのコードの種類  UTF-8 • ASCIIとの互換性を重視した可変長コードであり、アルファベットを1バイトで表す • HTMLなどの文書はUTF-8を用いる(基本の制御構造がASCIIをベースとするため) • ラテン文字は2バイト 、日本語、中国語、韓国語などは3バイト 、使用頻度の低い文字は4バイト  UTF-16 • 世界中のすべての文字は2バイト = 65536個に収まると考えて設計された • しかし実際には2バイトで収まらなかったので、使用頻度の低い文字は4バイトで表すことにした • Windows API ではUTF-16が用いられるため、一部のアプリは UTF-16を Unicode と表記している • UTF-16を用いると日本語を多用する文書では平均的にデータ量が少なくなる  UTF-32 • すべての文字を4バイトで表す • 固定長なので高速処理が可能だが、使用するデータ量が最も多くなる
  • 8. 8© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp 参考: Windows のメモ帳アプリでの文字コード選択 この Unicode は UTF-16 のこと
  • 9. 9© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp 文字列(型)  String型 ( = UnicodeString型) • UTF-16 で文字列を格納する型 • 新規に作るアプリケーションの文字列では String または UnicodeString型を用いる  AnsiString型 • Shift_JISを取り扱う処理向け  UTF8String 型 • AnsiString をベースとして UTF-8 を取り扱う型 • UTF-8 での入出力が必要な場合に用いる(ファイル入出力やインターネット経由の通信など)
  • 10. 10© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp 文字集合と収録文字  それぞれの文字集合で収録文字が違う  収録文字数の多いコードから少ないコードへの変換は文字が失われることも Unicode (UTF-8, UTF-16, UTF-32) 韓国語 中国語 日本語 AnsiString codepage = 932(Shift_JIS) ASCII その他の言語…
  • 11. 11© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp  文字列相互代入によるデータの欠落の例 { AnsiString strSJIS; UTF8String strUTF8; String strUTF16; strSJIS = L"日本語"; // OK: "日本語"は Shift_JISで表せる文字である strUTF8 = strSJIS; // OK: UnicodeにはすべてのShift_JISが含まれる strUTF16 = strSJIS; // OK: UnicodeにはすべてのShift_JISが含まれる strUTF16 = L"⌘"; // OK: Unicodeを扱う型にUnicode文字を代入している strUTF8 = strUTF16; // OK: Unicode同士なので常に成功するが、データ形式の変換が生じる strSJIS = L"𠮷野屋"; // NG: 「𠮷 = つちよし」はShift_JISに存在しない文字なので失われる strSJIS = strUTF8; // NG: strUTF8 ="⌘" のため、Shift_JIS に代入すると失われる } 文字列型の代入(コード例)
  • 12. 12© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp 文字列型の文字を参照する  文字列型[添字]で参照すると、文字列型の1つ1つの文字を参照できる  C++Builderで使用できる文字列型のうち、Delphiと共通の文字列型の添字は 1 から始める { String strUTF16 = L“Hello C++Builder”; // 文字列の各文字を配列として参照する for ( int i = 1 ; i <= strUTF16.Length() ; i++ ) { Memo1->Lines->Add( Format( "i=%d: %s", ARRAYOFCONST(( i, strUTF16[i] )) ) ); } }
  • 13. 13© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp 文字列型の代入と連結  文字列の代入には代入演算子 = 使用可能  文字列の結合には + が使用可能 { String str1 = L"Hello"; String str2 = L"C++Builder"; str1 = str1 + L" " + str2; // "Hello C++Builder" と表示される Memo1->Lines->Add(str1); }
  • 14. 14© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp 文字列型に対する操作  文字列型には様々な操作方法が提供されている • 一例を紹介 参考docwiki: http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.UnicodeString_Methods 操作 説明 = 文字列をコピーして代入する + 文字列を連結する == 文字列を比較して等しいかどうかを返す IsEmpty 文字列が空(文字を含んでいない)かどうかを返します。 Length 文字列の長さを返す Format, printf 書式文字列および引数の組み合わせから文字列を生成する UpperCase, LowerCase すべて大文字、または小文字に変換した文字列を返す Trim, TrimLeft, TrimRight 前や後ろのスペースを除いた文字列を返す { String str = L" [Delphi/C+Builder] "; str.UpperCase(); // 大文字に変換 str.LowerCase(); // 小文字に変換 str.Trim(); // 両端の空白を削除 str.TrimLeft(); // 文字列の前の空白を削除 str.TrimRight(); // 文字列の後ろの空白を削除 }
  • 15. 15© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp Format関数  設定した書式に基づいて、一連の引数を文字列化する関数 参考Docwiki: http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.SysUtils.Format // Formatの書式 Format(“文字列および書式”, ARRAYOFCONST((文字列に組みこむデータをカンマで区切って連ね る)) ); { String strWeather, strOutput; int iTemparture; strWeather = L”雨"; iTemparture = 20; //Formatはこんな感じで使えます strOutput = Format( L”明日の天気は %s 、気温は %d 度になるでしょう", ARRAYOFCONST(( strWeather, iTemparture )) ); Memo1->Lines->Add( strOutput ); }
  • 16. 16© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp クラス  クラスとは「ユーザが定義した型」と「型に対する操作」を組み合わせたもの // クラスの例 class TZipCode { public: // メンバ変数。public宣言でクラス外から操作可能 int ZipCode; String Pref; String City; String Area; // クラスに紐づく関数(メンバ関数)の宣言 String getFullAddress(); }; // 都道府県名 + 市区町村名 + 町域名を連結して返す処理 String TZipCode::getFullAddress() { return Pref + " " + City + " " + Area; } // クラスの実体(オブジェクト)を作り、メンバを初期化する TZipCode zipdata = { 1120004, L"東京都", L"文京区", L"後楽" }; // メンバ関数の実行はオブジェクトに対する操作である zipdata.getFullAddress(); // クラスを使わない例 struct SZipCode { int ZipCode; String Pref; String City; String Area; }; // 関数宣言部 String getFullAddress( SZipCode zipCode ); // 都道府県名 + 市区町村名 + 町域名を連結して返す処理 String getFullAddress( SZipCode zipCode ) { return zipCode.Pref + " " + zipCode.City + " " + zipCode.Area; } // 構造体の変数を作り、初期化する SZipCode zipdata = { 1120004, L"東京都", L"文京区", L"後楽" }; // 関数名だけでは SZipCode との関連付けが分かりづらい getFullAddress( zipdata );
  • 17. 17© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp クラスの特徴  データと操作が紐付いている • struct(構造体)の場合はデータ型と操作が紐付いておらず、型が一致する限りは無制限に操作できる • クラスの場合は操作(メンバ関数)を適切に実装することで安全な操作を提供できる  データの隠蔽 • クラスのメンバ変数はクラスの外から参照できない • クラスの中からは隠蔽されたデータを自由に参照できる • クラス外から参照させたい場合は public 宣言する  クラスの継承(詳細は次回で説明) • あるクラスを基本の共通の型(親クラス)とし、追加のデータ型や操作をつけた「派生クラス」を定義できる • 派生クラスは元の型の特徴を引き継ぐ(継承) • 例: 親クラス = 自動車 = 動力源を内蔵し、レールや架線によらず運転する車(ただし原付を除く) • この親クラスから、用途の違い(自家用、トラック、バス、タクシー、消防車、救急車など)で派生クラスを定義できる • ただしいずれの派生クラスも、親クラスの定義を含んでいる(継承している)
  • 18. 18© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp クラスの実装の基本形 class クラス名 { private: // クラス内だけで使う変数や関数の宣言 public: // クラス外から利用できる変数や関数の宣言 戻り値の型 何かのメンバ関数( … ); // 特別な意味を持つメンバ関数の宣言 クラス名( … ); // クラスと同名の関数は、オブジェクトを生成する時に実行(コンストラクタ) ~クラス名(); // クラス名に ~ が付く関数はオブジェクトの破棄時に実行(デストラクタ) }; クラス名::クラス名( int Z, String P, C, A ) { // オブジェクト生成時の初期化処理を書く } クラス名:: ~クラス名() { // 破棄時の終了処理を書く。クラスの操作に伴って動的生成したオブジェクトは、ここで確実に捨てる } 戻り値の型 クラス名::何かのメンバ関数() { … }
  • 19. 19© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp クラスの実装例 class TZipCode { private: // クラス内だけで使う変数や関数の宣言。変数は特に理由がある場合を除いて private 宣言する。 int ZipCode; String Pref; String City; String Area; public: // クラス外から利用できる変数や関数の宣言。外部との相互の受け渡しが必要な変数のみ public 宣言する。 String getFullAddress(); // 特別な意味を持つメンバ関数の宣言 // クラスと同名の関数は、オブジェクトの生成時に実行(コンストラクタ) TZipCode( int ZipcCode, String Prev, String City, String Area ); // クラス名に ~ が付く関数はオブジェクト破棄で実行(デストラクタ) TZipCode(); }; TZipCode::TZipCode( int Z, String P, String C, String A ) { // オブジェクト生成時の初期化処理を書く ZipCode = Z; Pref = P; City = C; Area = A; } TZipCode::~TZipCode() { // 破棄時の終了処理を書く。クラスの操作に伴って動的生成したオブジェクトは、ここで確実に捨てる } String TZipCode::getFullAddress() { return Pref + " " + City + " " + Area; }
  • 20. 20© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp クラスの利用例 { // クラスのインスタンスを new で確保する例 // データはアプリケーション共通の領域に作られる TZipCode *zipdata = new TZipCode( 1120004, L“東京都”, L“文京区”, L“後楽” ); // new で確保した場合は、メンバ関数やメンバ変数への参照は -> で行う Memo1->Lines->Add( zipdata->getFullAddress() ); // new した場合は不要になった時点で必ず delete する。 delete zipdata; } { // 実行中の関数やブロック用の領域に確保する例 TZipCode zipdata2( 1120004, L“東京都”, L“文京区”, L“後楽” ); // メンバ関数やメンバ変数への参照は . で行う Memo1,Lines.Add(zipdata2.getFullAddress() ); // 確保したインスタンスは関数やブロックを抜けるときに破棄される }
  • 21. 21© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp 本日のセミナー内容は 弊社ブログに掲載予定 [コミュニティ] ↓ [日本人ブログ] 実施内容の再視聴  皆さんが見ているWebページの下に、順次アップロード  エンバカデロWebサイト : http://forms.embarcadero.com/starter-tutorial-webinar  [リソース] – [イベント]の「Delphi / C++Builder Starter チュートリアルシリーズ」ページ  実施内容サマリー • Community embarcadero (コミュニティ エンバカデロ)にWebリンク、サンプルコード情報等 http://community.embarcadero.com/ 「エンバカデロ」で検索
  • 22. 22© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp 第6回 「文字列 と オブジェクト」  今日のねらい • 文字列を知る • 文字列の操作 • クラスとオブジェクトの概略を知る  実施内容 • 文字列の型 • 文字列の代入とヘルパーについて • クラスとオブジェクトの意味を知る • クラスの定義とオブジェクトの宣言
  • 23. 23© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp  次回のC++Builderパートは 3月6日(月)17:30より “オブジェクト指向 „