matlab® programming guidelines version...

42
© Copyright 2018JMAAB. All rights reserved. 1 MATLAB® PROGRAMMING GUIDELINES Version 1.0(日本語版) Japan MBD Automotive Advisory Board (JMAAB) 2018 03 30

Upload: others

Post on 27-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018JMAAB. All rights reserved.

1

MATLAB® PROGRAMMING GUIDELINES

Version 1.0(日本語版)

Japan MBD Automotive Advisory Board (JMAAB)

2018年 03月 30日

Page 2: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018JMAAB. All rights reserved.

2

■ 著作権について

• 本ドキュメントの著作権は JMAABに帰属します。

• JMAABは、本文書の内容に関し、いかなる保証もするものではありません。万一本文書を利用して

不具合等があった場合でも JMAABは一切責任を負いかねます。また、本文書に記載されている事

項は予告なしに変更または廃止されることがありますので、あらかじめご了承ください。

■ 本ドキュメントの取扱いについて

• 本文書は、非営利目的、または利用者内部で使用する場合に限り、複製が可能です。また、本文書

を引用する場合は、本文書からの引用であることを明示し、引用された著作物の題号や著作者名を

明示する等の引用の要件を満たす必要があります。

• 本成果物については JMAABホームページ(http://jmaab.mathworks.jp/)を参照下さい。

• その他のお問い合わせは、JMAAB事務局([email protected])へご連絡下さい。

Page 3: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018JMAAB. All rights reserved.

3

目次

1. はじめに 5

1.1. MATLABプログラミングガイドラインとは… 5

1.2. ガイドラインのテンプレート 5

1.2.1. ルール ID 5

1.2.2. サブ ID 5

1.2.3. タイトル 5

1.2.4. 記述内容 5

1.2.5. カスタムパラメーター 6

1.2.6. 根拠 6

1.3. ガイドライン別表のテンプレート 6

1.3.1. 最終更新 6

1.3.2. モデル対応ルール 6

1.3.3. MISRA対応 ID 6

1.4. ガイドラインの構成 6

2. ガイドラインルール 7

2.1. フォルダーとファイル 7

2.1.1. mp_0001 : MATLABコードファイルの命名方法 7

2.1.2. mp_0002 :フォルダー名に使用できる文字 7

2.2. 識別子の命名 8

2.2.1. mp_0003 :識別子の命名 8

2.3. 記述の統一 9

2.3.1. mp_0004 :エディター設定 9

2.3.2. mp_0005 :インデント幅の統一 10

2.3.3. mp_0006 :複数行にわたる実行文のインデント 10

2.3.4. mp_0007 :実行文の記述方法 11

2.3.5. mp_0008 :括弧の書式 12

2.3.6. mp_0009 :構造体の記述方法 12

2.3.7. mp_0010 :演算子の優先順位の記述方法 13

2.3.8. mp_0011 :半角スペースの挿入方法 13

2.3.9. mp_0012 :コメントの記述方法 14

2.3.10. mp_0013 :一時的に挿入するコードの記述方法 14

2.3.11. mp_0014 :小数点の表現 15

2.4. 制御構文 15

2.4.1. mp_0015 :コントロールステートメントのインデント 15

2.4.2. mp_0016 :コントロールステートメントのネスト数 16

2.4.3. mp_0017 :コントロールステートメントのコメント 16

2.4.4. mp_0018 :ループ構文の記述方法 17

2.4.5. mp_0019 :try/catch ステートメントの記述方法 18

2.4.6. mp_0020 :Switch/Caseステートメントの記述方法 18

2.4.7. mp_0021 :分岐構文の最終分岐 19

2.4.8. mp_0022 :条件式の記述方法 20

2.4.9. mp_0023 :関係演算子の記述方法 22

2.5. 関数 23

2.5.1. mp_0024 :無名関数の使用方法 23

Page 4: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018JMAAB. All rights reserved.

4

2.5.2. mp_0025 :関数の呼び出し方法 24

2.5.3. mp_0026 :プライベート関数の使用方法 25

2.5.4. mp_0027 :関数の戻り値の記述方法 25

2.5.5. mp_0028 :入れ子関数の不使用 25

2.5.6. mp_0029 :関数定義の記述方法 26

2.5.7. mp_0030 :関数の戻り値の型 26

2.5.8. mp_0031 :開発環境ツール作成時の関数使用 27

2.5.9. mp_0032 :関数ヘッダー情報 27

2.5.10. mp_0040 :関数の戻り値の使用 28

2.5.11. mp_0033 :関数の入力変数 28

2.5.12. mp_0034 :関数の行数 28

2.6. MATLAB組み込み関数の使用方法 29

2.6.1. mp_0035 :戻り値の型が不定の MATLAB組み込み関数の記述方法 29

2.6.2. mp_0036 :existの記述方法 29

2.6.3. mp_0037 :文字列比較関数の記述方法 30

2.6.4. mp_0038 :ファイル操作関数の記述方法 30

2.6.5. mp_0039 :モデルコンパイルの記述方法 31

2.7. 変数 32

2.7.1. mp_0041 :変数の初期化 32

2.7.2. mp_0042 :グローバル変数の使用方法 33

2.7.3. mp_0043 :未使用の変数 33

2.7.4. mp_0044 :数値定数の記述方法 34

2.7.5. mp_0045 :変数の型変更 34

2.7.6. mp_0046 :配列インデックスの記述方法 35

2.8. その他 35

2.8.1. mp_0047 :空でない文が満たすべき条件 35

2.8.2. mp_0048 :実行できない文 36

2.8.3. mp_0049 :ゼロによる除算 36

2.8.4. mp_0050 :文字列の算術演算 37

3. ガイドライン別表 38

4. ガイドライン用語説明 41

5. 更新履歴 42

5.1. JMAABスタイルガイドライン編集委員 42

Page 5: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018JMAAB. All rights reserved.

5

1. はじめに

1.1. MATLABプログラミングガイドラインとは… モデルベース開発(MBD)を効率的に行うための環境整備において MATLAB言語によるプログラミングを

おこなう上で、プログラム開発者間で容易に共通の理解が得られるように、MATLABプログラミングについて

重要な基本的ルールを規定したものです。さらに、CONTROL ALGORITHM MODELING GUIDELINES

USING MATLAB®, Simulink®, and Stateflow®の中で MATLAB言語に関して規定されたルールを本ガイド

ラインに移管し掲載しています。ガイドラインの準拠により、可読性、保守性、効率性のバランスが取れたプロ

グラム開発が可能となります。尚、Ver1.0では、MATLABバージョン R2010b以降を対象としてルールが作

られています。

1.2. ガイドラインのテンプレート ガイドラインは以下のテンプレートに従って作成されています。独自でガイドラインを作成する場合も、この

テンプレートの使用を推奨します。

注意 : このテンプレートは、ガイドラインを正しく理解する為、最低限必要な項目を表にしたものです。既存

の項目のいずれにも重複しない限り、新たな項目をこのテンプレートに追加することができます。

ルール ID : タイトル xx_nnnn : ガイドラインのタイトル(短く、他と重複しない)

ルール

サブ ID 記述内容 カスタムパラメーター

xn

(ガイドラインの説明) (パラメータ名)

【正】 (記述内容に正しいイメージ及びコメント)

【誤】 (記述内容に誤りのイメージ及びコメント)

根拠

サブ ID 記述内容

xn (根拠内容)

1.2.1. ルール ID

ルール IDは、アルファベットの小文字 2文字(ガイドライン著者の識別)と、4桁の数字をアンダースコアで

つないだものを使用します。IDは、永久固定とし変更されることはなく、ガイドラインを参照する時に使用しま

す。MATLAB® PROGRAMMING GUIDELINESでは mpの IDを使用します。

1.2.2. サブ ID

サブ IDは、ルール ID一つに対して複数存在し、「採否選択式」と「排他選択式」があります。採否選択式

は、アルファベットの小文字 1文字(アルファベット順)で使用します。採否選択式のサブ IDの採用可否は使

用者の任意となります。排他選択式は、アルファベットの小文字 1文字(アルファベット順)と、1桁の数字を結

合したものを使用します。排他選択式は、採否を判断し採用とした場合にいずれかを選択するものとなりま

す。

xy_0000 → xy_0000a 採否選択式(採用可否は使用者の任意)

→ xy_0000b1 排他選択式(採用する場合、xy_0000b1か xy_0000b2どちらかを選択)

→ xy_0000b2 排他選択式(採用する場合、xy_0000b1か xy_0000b2どちらかを選択)

1.2.3. タイトル

タイトルは、そのガイドラインを短く説明したユニークなものを設定します。

1.2.4. 記述内容

記述内容は、ガイドラインの詳細な内容が記述されます。

Page 6: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018JMAAB. All rights reserved.

6

1.2.5. カスタムパラメーター

カスタムパラメーター欄に記述のあるルールは、記述されている項目についてプロジェクトの特性に合わせ

て対象範囲を決定する必要があります。

記述内容には対象や値の例が記載していますが、プロジェクトのプロセスや制御対象の条件、携わるエン

ジニアの平均的なレベルから総合的に判断し、チェック時に適用する内容を決定してください。

1.2.6. 根拠

ガイドラインルールの記述内容について、可読性や検証効率、コード生成後のコード効率等の観点から利

用を推奨する理由を記述しています。

1.3. ガイドライン別表のテンプレート

ガイドライン項目毎のルール最終更新日、パラメータの詳細は以下の別表テンプレートに従って記

載されます。

ID:タイトル サブID 最終更新 モデル

対応ルール MISRA対応 ID

xx_nnnn : ガイドラインのタイトル

(短く、他と重複しない) xn Ver番号 該当項目に○ MISRA ID番号

1.3.1. 最終更新

最終更新には、最終変更した際のバージョン番号を記述します。

1.3.2. モデル対応ルール

Simulink/Stateflowモデルにおいて、以下のブロック内部の記述にも適用するガイドラインであることを

示します。

・Chart(アクション言語が Cの場合も適用します)

・State Transition Table

・Truth Table

・MATLAB Function

1.3.3. MISRA対応 ID

ガイドラインに対応する MISRAルールの ID番号を記述します。

1.4. ガイドラインの構成 1章は本書の解説、2章にガイドラインルールを掲載しています。

3章は、ガイドライン別表を掲載しています。

4章は、用語についての説明を記載しています。

5章は本ガイドラインの改定内容や履歴をまとめています。

Page 7: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

7

2. ガイドラインルール

2.1. フォルダーとファイル

2.1.1. mp_0001 : MATLABコードファイルの命名方法

ルール ID : タイトル mp_0001 : MATLAB コードファイルの命名方法

ルール

サブ ID 記述内容 カスタムパラメーター

a ファイル名の文字数は 3 文字以上、63 文字以内とします。 ・最小文字数

・最大文字数

b ファイル名の末尾はアンダースコア以外とします。 -

c ファイル名のアンダースコアは単独で使用します。

(連続で使用しません)

-

【正】

Test_Module.m

【誤】

Test__Module.m

d MATLAB の検索パスを通したフォルダー内のファイル名は同一

にしません。

<例外>

以下の MATLAB コードファイルはスコープ内で複数存在するこ

とが可能です。

① sl_customization.m

② slblocks.m

-

e ファイル名を MATLAB 予約語と同一にはしません。 -

根拠

サブ ID 記述内容

a

ファイル名が短いと意味のある名前にならないことが多く、可読性が低下します。

ファイル名が長いと参照や自動生成コードで予想外の問題が起こるリスクがあります。ま

た、GUI等でパス名を表示しきれないことがあります。

b

編集過程でアンダースコアをつける場合があり、編集中なのか完了したのか不明確になり

ます。また、アンダースコアの有無の違いだけの 2 つのファイルが存在すると紛らわしくな

ります。

c アンダースコアの連続使用は単独使用と見間違えやすく、可読性が低下します。

d 同一名称のファイルの中でどのファイルが実行されるか分かりにくくなります。

e ユーザーおよび MATLAB システムが、MATLAB の予約語と混同し予期せぬ動きをする可

能性があります。

2.1.2. mp_0002 :フォルダー名に使用できる文字

ルール ID : タイトル mp_0002 : フォルダー名に使用できる文字

ルール

サブ ID 記述内容 カスタムパラメーター

a ファイル名の文字数は 3 文字以上、63 文字以内とします。 ・最大文字数

b フォルダー名の先頭と末尾はアンダースコア以外とします。 -

c フォルダー名のアンダースコアは単独で使用します。(連続で使

用しません)

-

Page 8: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

8

d フォルダー名を MATLAB 予約語と同一にはしません。 -

根拠

サブ ID 記述内容

a フォルダー名が長いと参照や自動生成コードで予想外の問題が起こるリスクがあります。

また、GUI等でパス名を表示しきれないことがあります。

b

編集過程でアンダースコアをつける場合があり、編集中なのか完了したのか不明確になり

ます。また、アンダースコアの有無の違いだけの 2 つのフォルダーが存在すると紛らわしく

なります。

c アンダースコアの連続使用は単独使用と見間違えやすく、可読性が低下します。

d ユーザーおよび MATLAB システムが、MATLAB の予約語と混同し可読性が低下します。

2.2. 識別子の命名

2.2.1. mp_0003 :識別子の命名

ルール ID : タイトル mp_0003 : 識別子の命名

ルール

サブ ID 記述内容 カスタムパラメーター

a 識別子の命名は、プロジェクトで定めた命名規則に従います。 ・命名規則

【正】

命名規則:「ローカル変数をキャメルケースにします。」の場合

nameCamelCase = 0;

b 識別子は互いに異なる名前とします。 -

c スコープに存在する関数と同一の名前を持つ識別子を定義しま

せん。

<例外>

以下の MATLAB コードファイルはスコープ内で複数存在するこ

とが可能です。

①sl_customization.m

②slblocks.m

-

d 識別子名の文字数は 3 文字以上、63 文字以内とします。 ・最小文字数

・最大文字数

e 識別子名の先頭と末尾はアンダースコア以外とします。 -

f 識別子名のアンダースコアは単独で使用します。(連続で使用し

ません)

-

g ファイル名とメイン関数名は同一にします。 -

根拠

サブ ID 記述内容

a 運用ルールを決めることにより可読性が向上します。

b 変数名、クラス名、関数名(ユーザー定義関数を含む)を同一名称とした際、一般的な作法

から外れることにより可読性が低下し、予想外の問題が起こるリスクがあります。

c 関数(pi、true、false、MATLAB 予約語、ユーザー定義関数など)と同一の名前の識別子を

使用した際に、関数が上書きされて予期せぬ動作となります。

d

識別子名が短いと意味のある名前にならないことが多く、可読性が低下します。

ファイル名が長いと参照や自動生成コードで予想外の問題が起こるリスクがあります。ま

た、GUI等でパス名を表示しきれないことがあります。

Page 9: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

9

e

編集過程でアンダースコアをつける場合があり、編集中なのか完了したのか不明確になり

ます。また、アンダースコアの有無の違いだけの 2 つの識別子が存在すると紛らわしくなり

ます。

f アンダースコアの連続使用は単独使用と見間違えやすく、可読性が低下します。

g ファイル名が関数名として判断されるため、ファイル名と関数名が違うと可読性が低下しま

す。

2.3. 記述の統一

2.3.1. mp_0004 :エディター設定

ルール ID : タイトル mp_0004 : エディター設定

ルール

サブ ID 記述内容 カスタムパラメーター

a MATLAB エディターでプログラム開発する場合、設定の

{MATLAB}-{エディター/デバッガー}を下記の通り設定します。

(1) {表示}-{テキスト右端の制限}-{配置}を”75”列とします。

(2) {タブ}-{タブとインデント}-{インデントサイズ}は”4”とします。

(3) {タブ}-{タブとインデント}-{Tabキーでスペースを挿入}のチェッ

クボックスにチェックを入れます。

(4) {言語}-{コメント書式}-{列の最大幅}は” 75”とします。

(5) {言語}-{コメント書式}-{入力中にコメントを自動的に折り返す}

のチェックボックスにチェックをいれます。

(6) {言語}-{インデント処理}-{入力時にスマートインデントを適用}

のチェックボックスにチェックを入れます。

※上記は MATLAB R2015aのデフォルト設定

-

【正】

設定画面

(1) {表示}-{テキスト右端の制限}-{配置}を”75”列とします。

(2) {タブ}-{タブとインデント}-{インデントサイズ}は”4”とします。

(3) {タブ}-{タブとインデント}-{Tabキーでスペースを挿入}のチェックボックスにチェックを入

れます。

Page 10: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

10

(4) {言語}-{コメント書式}-{列の最大幅}は”75”とします。

(5) {言語}-{コメント書式}-{入力中にコメントを自動的に折り返す}のチェックボックスにチェッ

クをいれます。

(6) {言語}-{インデント処理}-{入力時にスマートインデントを適用}のチェックボックスにチェッ

クを入れます。

根拠

サブ ID 記述内容

a 運用ルールを決めることにより可読性が向上します。

2.3.2. mp_0005 :インデント幅の統一

ルール ID : タイトル mp_0005 : インデント幅の統一

ルール

サブ ID 記述内容 カスタムパラメーター

a 1 段あたりのインデント幅はプロジェクトで規定した幅にします。 ・インデント幅

根拠

サブ ID 記述内容

a 記述を統一し、可読性を向上します。

2.3.3. mp_0006 :複数行にわたる実行文のインデント

ルール ID : タイトル mp_0006 : 複数行にわたる実行文インデント

ルール

サブ ID 記述内容 カスタムパラメーター

a 実行文が複数行にわたる場合、2 行目以降はインデントして記

述します。インデントの段数はプロジェクト毎に規定します。

・インデント段数

Page 11: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

11

インデントの段数2とした場合

【正】

インデントの段数2で設計している。

if ((foo >= 10) && (bar >= 20))

find_system(gcs, ...

'findall', 'on',...

'SearchDepth', 1, ...

'LookUnderMasks', 'none');

end

【誤】

インデントの段数3で設計している

if ((foo >= 10) && (bar >= 20))

find_system(gcs, ...

'findall', 'on',...

'SearchDepth', 1, ...

'LookUnderMasks', 'none');

end

インデントの段数を合わせず設計している

if ((foo >= 10) && (bar >= 20))

find_system(gcbh, 'findall', 'on',...

'SearchDepth', 1, ...

'LookUnderMasks', 'none');

end

根拠

サブ ID 記述内容

a 記述を統一し、可読性を向上します。

2.3.4. mp_0007 :実行文の記述方法

ルール ID : タイトル mp_0007 : 実行文の記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

a 1 行に複数の実行文を記述しません。 -

【正】

if foo > 0 bar = 10; end

【誤】

if foo > 0;bar = 10;end

b 実行文の最後はセミコロン(;)を記述します。 -

【正】

foo = 1 + 2;

【誤】

foo = 1 + 2

根拠

1段 2段

1段 2段 3段

Page 12: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

12

サブ ID 記述内容

a 記述を統一し、可読性を向上します。

b セミコロン(;)を付けないと、コマンドウィンドウに実行結果が表示され、重要な警告を見逃す

可能性があります。

2.3.5. mp_0008 :括弧の書式

ルール ID : タイトル mp_0008 : 括弧の書式

ルール

サブ ID 記述内容 カスタムパラメーター

a 左括弧の直後に半角スペースを入れません。 -

【正】

fcnc(arg) foo(bar)

【誤】

fcnc( arg) foo( bar)

b 右括弧の直前に半角スペースを入れません。 -

【正】

fcnc(arg) foo(bar)

【誤】

fcnc(arg ) foo(bar )

c 関数名や変数名と左括弧の間に半角スペースを入れません。 -

【正】

fcnc(arg) foo(bar)

【誤】

fcnc (arg) foo (bar)

根拠

サブ ID 記述内容

abc 記述を統一し、可読性を向上します。

2.3.6. mp_0009 :構造体の記述方法

ルール ID : タイトル mp_0009 : 構造体の記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

a 構造体メンバーのコンマ演算子の前後に半角スペースを入れま

せん。

-

【正】

str.data1

【誤】

str .data1 str. data1 str . data1

根拠

サブ ID 記述内容

a 記述を統一し、可読性を向上します。

Page 13: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

13

2.3.7. mp_0010 :演算子の優先順位の記述方法

ルール ID : タイトル mp_0010 : 演算子の優先順位の記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

a 式に優先順位の異なる演算子が含まれる場合、括弧で演算順

序を明確化します。

-

【正】

foo = (bar * baz) + qux; foo = bar + (baz * qux); 演算子の優先順位が同じ場合は括弧は

不要です。 foo = bar + baz - qux (bar && baz) || (qux && quux)

【誤】

foo = bar * baz + qux;

foo = bar + baz * qux;

bar && baz || qux && quux

根拠

サブ ID 記述内容

a 演算順序を明確化します。

2.3.8. mp_0011 :半角スペースの挿入方法

ルール ID : タイトル mp_0011 : 半角スペースの挿入方法

ルール

サブ ID 記述内容 カスタムパラメーター

a 演算子の前後及びコンマの後ろには最低 1 つの半角スペースを

入れます。ただし、単項演算子の後ろには半角スペースを入れ

ません。

・半角スペース最低

長値

【正】

foo = bar + baz; strcmp(qux, 'あいうえお') <例外> 単項演算子の後ろには半角スペースを

入れません。 x = -baz;

【誤】

foo=bar+baz; strcmp(qux,'あいうえお')

x = - baz;

b 式やステートメント終了を示すセミコロンの直前に半角スペース

は入れません。

-

【正】

foo = bar + baz;

【誤】

foo = bar + baz ;

c1 行の途中にセミコロンがある場合、セミコロンの後ろのみに半角

スペースを入れます。

-

【正】

[bar; baz] 【誤】

[bar ; baz] [bar; baz]

Page 14: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

14

c2 行の途中にセミコロンがある場合、セミコロンの前後に半角スペ

ースを入れます。

-

【正】

[bar ; baz]

【誤】

[bar; baz] [bar; baz]

根拠

サブ ID 記述内容

a 演算子やコンマを強調し、可読性を向上します。

b 式やステートメントの終了が明示的になり、可読性を向上します。

c1c2 セミコロンで区切られていることを強調し、可読性を向上します。

2.3.9. mp_0012 :コメントの記述方法

ルール ID : タイトル mp_0012 : コメントの記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

a コメントを記述する際は単独のパーセント記号を記述します。ブ

ロックコメント演算子(%{ ~ %})は記述しません。

-

【正】

% 単独のパーセント記号を使用 foo = bar;

【誤】

%{ ブロックコメント演算子を使用 %}

foo = bar;

根拠

サブ ID 記述内容

a 可読性が向上します。ブロックコメント演算子を使用すると、コメント行が分かりにくくなりま

す。

2.3.10. mp_0013 :一時的に挿入するコードの記述方法

ルール ID : タイトル mp_0013 : 一時的に挿入するコードの記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

a 一時的に挿入するデバッグコードには、リマインダーコメント

(“TODO”、”FIXME”、又はプロジェクトで規定するワード)を付与

します。

・リマインダーコメント

【正】

switch flg case 1 data = 10; case 2 data = 15; otherwise % FIXME:仕様未定の為、ダミー値 data = 0;

Page 15: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

15

end

根拠

サブ ID 記述内容

a

リマインダーコメントを付与することにより、デバッグコードの検索を容易にし、デバッグコー

ドをリリースソフトから削除し忘れることを回避します。

また、MATLAB の TODO/FIXME レポート機能を用いてリマインダーコメントを付与した箇

所のレポートを出力できます。

2.3.11. mp_0014 :小数点の表現

ルール ID : タイトル mp_0014 : 小数点の表現

ルール

サブ ID 記述内容 カスタムパラメーター

a 小数点の前のゼロは省略しません。 -

【正】

foo = 0.5;

【誤】

foo = .5;

根拠

サブ ID 記述内容

a ゼロを明示することで、小数点の見落としを防げます。

2.4. 制御構文

2.4.1. mp_0015 :コントロールステートメントのインデント

ルール ID : タイトル mp_0015 : コントロールステートメントのインデント

ルール

サブ ID 記述内容 カスタムパラメーター

a コントロールステートメントの文は1段インデントを設けます。 ・インデント段数

【正】

% △△機能の状態別制御 % 1モードの判定 if (flgA == ON) % 1モード func1(); % 2モードの判定 elseif (flgB == ON) % 2モード func2(); % 1,2モード以外 else % flg条件非成立時は制御なし end

【誤】

% △△機能の状態別制御 % 1モードの判定 if (flgA == ON) % 1モード func1(); % 2モードの判定 elseif (flgB == ON) % 2モード func2(); % 1,2モード以外 else % flg条件非成立時は制御なし end

根拠

サブ ID 記述内容

Page 16: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

16

a 条件式と文の見分けが容易になります。

2.4.2. mp_0016 :コントロールステートメントのネスト数

ルール ID : タイトル mp_0016 : コントロールステートメントのネスト数

ルール

サブ ID 記述内容 カスタムパラメーター

a コントロールステートメントのネストはプロジェクトで定めた段数以

下にします。

・ネストの上限数

【正】

ネストを 3 段と定めた場合

if (flgA == ON) % 1モード func1(); if (flgB == ON) % 2モード func2(); if (flgC == ON) % 3モード func3(); end end end

【誤】

ネストを 3 段と定めた場合

if (flgA == ON) % 1モード func1(); if (flgB == ON) % 2モード func2(); if (flgC == ON) % 3モード func3(); if (flgD == ON) % 4モード func4(); end end end end

根拠

サブ ID 記述内容

a ネストを深くすると、内容の把握が困難になります。深いネストの内容を把握するために、

浅い部分の内容を把握し続ける必要があります。

2.4.3. mp_0017 :コントロールステートメントのコメント

ルール ID : タイトル mp_0017 : コントロールステートメントのコメント

ルール

サブ ID 記述内容 カスタムパラメーター

a 制御構文全体を説明するコメントを最初の制御文の直前行に記

述します。

-

【正】

% △△機能の状態別制御 % 1モードの判定 if (flgA == ON) % 1モード func1(); % 2モードの判定 elseif (flgB == ON) % 2モード

【誤】

% 1モードの判定 if (flgA == ON) % 1モード func1(); % 2モードの判定 elseif (flgB == ON) % 2モード

Page 17: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

17

func2(); % 1,2モード以外 else % flg条件非成立時は制御なし end

func2(); % 1,2モード以外 else % flg条件非成立時は制御なし end

b 制御文を説明するコメントを記述します。 -

【正】

% △△機能の状態別制御 % 1モードの判定 if (flgA == ON) % 1モード func1(); % 2モードの判定

elseif (flgB == ON) % 2モード func2(); % 1,2モード以外 else % flg条件非成立時は制御なし end

【誤】

% △△機能の状態別制御

if (flgA == ON) % 1モード func1();

elseif (flgB == ON) % 2モード func2();

else % flg条件非成立時は制御なし end

c 分岐後の処理内容を説明するコメントを記述します。 -

【正】

% △△機能の状態別制御 % 1モードの判定 if (flgA == ON) % 1モード func1(); % 2モードの判定 elseif (flgB == ON) % 2モード func2(); % 1,2モード以外 else % flg条件非成立時は制御なし end

【誤】

% △△機能の状態別制御 % 1モードの判定 if (flgA == ON)

func1(); % 2モードの判定 elseif (flgB == ON)

func2(); % 1,2モード以外 else % flg条件非成立時は制御なし end

根拠

サブ ID 記述内容

a ループや分岐全体としての処理内容を記述することで、詳細な内容が理解しやすくなりま

す。

bc 関係者間で共有すべき情報を明示し、誤解釈を防げます。

2.4.4. mp_0018 :ループ構文の記述方法

ルール ID : タイトル mp_0018 : ループ構文の記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

Page 18: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

18

a 前判定型のループ構造で、ループ回数が実行時に規定できる場

合は for文を用います。規定できない場合は while 文を記述しま

す。

-

b ループ構文は、プロジェクトで定めた位置にコメントを記述しま

す。(mp_0017 で指定された位置にもコメントを記載します)

・コメント位置

【正】既定の一例

% 繰り返し構造処理に関するコメント for foo = 1:10 % ループ本体の処理に関するコメント bar(foo) = foo; end

根拠

サブ ID 記述内容

a 似た機能を持つ構文を使い分けることで動作が安定、移植性と可読性が向上します。

b 記述を統一することで可読性が向上します。

2.4.5. mp_0019 :try/catchステートメントの記述方法

ルール ID : タイトル mp_0019 : try/catch ステートメントの記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

a try/catch ステートメントは、プロジェクトで定めた位置にコメント

を記載します。(mp_0017 で指定された位置にもコメントを記載し

ます)

・コメント位置

【正】

Try直前に処理全体に関するコメントを記載し、さらにtry/catch直後に改行して、

各処理内容に関するコメントを記載する例

% try~catch処理に関するコメント try % 通常の処理に関するコメント ret = func(); catch % 例外の処理に関するコメント warning('Problem using function. Assigning a value of 0.'); ret = 0; end

根拠

サブ ID 記述内容

a 記述を統一することで可読性が向上します。

2.4.6. mp_0020 :Switch/Caseステートメントの記述方法

ルール ID : タイトル mp_0020 : Switch/Case ステートメントの記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

Page 19: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

19

a Switch/Case ステートメントの case 式は、定数値を使用します。

定数値は、直値だけでなく、動的に変化しない変数等でも記述で

きます。

-

【正】

foo2 = 1; foo3 = 2; switch (foo1) case foo2 bar = 2; case foo3 bar = 3; otherwise bar = 4; end

【誤】

foo2 = round(10 * rand); foo3 = round(10 * rand); switch (foo1) case foo2 bar = 2; case foo3 bar = 3; otherwise bar = 4; end

b Switch/Case ステートメントの case は2つ以上にします。

(1 つの場合は ifステートメントを使用します)

-

【正】

switch (foo) case 1 bar = 2; case 2 bar = 3; otherwise bar = 4; end

【誤】

switch (foo) case 1 bar = 2; otherwise bar = 4; end

c Switch/Case ステートメントの switch 式、case 式は、論理型にし

ません。

(論理型の場合は ifステートメントを使用します)

-

【正】

foo = (bar1 > 0); if (foo) bar2 = 2; else bar2 = 3; end

【誤】

foo = (bar1 > 0); switch (foo) case 1 bar2 = 2; otherwise bar2 = 3; end

根拠

サブ ID 記述内容

a case 式に変数を用いた場合、条件が動的に変化することにより可読性、保守性が低下し

ます。

bc 記述を統一することで可読性が向上します。

2.4.7. mp_0021 :分岐構文の最終分岐

ルール ID : タイトル mp_0021 : 分岐構文の最終分岐

ルール

Page 20: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

20

サブ ID 記述内容 カスタムパラメーター

a ifステートメントによる分岐構文は、else ブロックを必ず記述しま

す。

また、何も処理する必要が無い場合は、その旨をコメントで明確

化します。

-

【正】

if foo bar = 1; else % 何もしない end

【誤】

if foo bar = 1; end

b switch ステートメントによる分岐構文は、otherwise ブロックを必

ず記述します。

また、何も処理する必要が無い場合は、その旨をコメントで明確

化します。

-

【正】

switch foo case 1 bar = 0; case 2 bar = 50; case 3 bar = 100; otherwise % 何もしない end

【誤】

switch foo case 1 bar = 0; case 2 bar = 50; case 3 bar = 100; end

根拠

サブ ID 記述内容

a

処理が無い場合でも else ブロックをつけてコメントを記述することで、それ以上の分岐が無

いことを明確化でき、第三者の不要な懸念を防げます。(処理の記述漏れではないことの

明示)

b

処理が無い場合でも otherwise ブロックをつけてコメントを記述することで、それ以上の分

岐が無いことを明確化でき、第三者の不要な懸念を防げます。(処理の記述漏れではない

ことの明示)

2.4.8. mp_0022 :条件式の記述方法

ルール ID : タイトル mp_0022 : 条件式の記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

a 条件式は単一の論理値(true または false)が得られる式で記述

します。

-

【正】

% foo ・・・logical型以外の変数 if (foo ~= 0)

【誤】

% foo ・・・logical型以外の変数 if foo

b 条件式の結果が常に不変とならないようにします。 -

Page 21: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

21

【正】

% fooは0~20の値 if foo > 10

【誤】

% fooは0~20の値 if foo > 30

bar = true; if bar

c 条件式内で使用できる演算は関係演算と論理演算のみとしま

す。

-

【正】

foo = a + b; if foo > bar

【誤】

if a + b > bar

if length(foo) > bar

d1 条件式内では関数を使用しません。 -

【正】

foo1 = length(foo2) if foo1 > bar

【誤】

if length(foo) > bar

d2 条件式内で使用できる関数は、論理値を返す関数のみとしま

す。

-

【正】

if isempty(foo)

【誤】

if length(foo) > bar

d3 条件式内で使用できる関数は、プロジェクト内で認めた関数のみ

とします。

・条件式内で使用可

能な関数

【正】

% lengthを条件式内で使用可能と認めた場合 if length(foo) > bar

【誤】

% lengthを条件式内で使用可能と認めていない場合 if length(foo) > bar

e1 条件式一行に使用できる二項演算子はプロジェクトで定めた数

以下にします。

・条件式の 1 行に使

用可能な二項演算子

の数

【正】

% 3つまで記載可とした場合 if (foo1 && foo2) ... || (foo3 && foo4 && foo5)

【誤】

% 3つまで記載可とした場合 if (foo1 && foo2) || (foo3 && foo4

&& foo5)

e2 条件式に使用できる二項演算子はプロジェクトで定めた数以下

にします。

・条件式全体で使用

可能な二項演算子の

Page 22: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

22

【正】

% 1つまで記載可とした場合

foo = (a >= b); bar = (c == d); if foo && bar

【誤】

% 1つまで記載可とした場合 if (a >= b) && (c == d)

f 括弧のネスト数はプロジェクトで定めた数以下にします。 ・ネストの段数

【正】

% 1段まで記載可とした場合 foo = ((a - b) * c) / d; if abs(foo) > bar

【誤】

% 1段まで記載可とした場合 if abs(((a - b) * c) / d) > bar

g1 条件式を途中で改行する場合は、論理演算子の直後で改行し、

2 行目以降はインデントを揃えて記述します。

-

【正】

if foo1 ||... foo2 ||... foo3 end

【誤】

if foo1 ... || foo2 ... || foo3 end

g2 条件式を途中で改行する場合は、論理演算子の直前で改行し、

2 行目以降はインデントを揃えて記述します。

-

【正】

if foo1 ... || foo2 ... || foo3 end

【誤】

if foo1 ||... foo2 ||... foo3 end

根拠

サブ ID 記述内容

a 条件成立、非成立を明確化します。

b 条件式の結果が不変の場合、不要な処理、または、プログラミングミスの可能性がありま

す。

cd1d2d3 条件式の内容が把握しやすくなります。また、条件式の外で演算することにより演算値の

確認が容易になります。

e1 条件式の 1 行に記載する演算子を制限することで、各条件の関係性が理解しやすくなりま

す。

e2 条件式全体に記載する演算子を制限することで、各条件の関係性が理解しやすくなりま

す。

f 条件式の内容が把握しやすくなります。また、演算値の確認が容易になります。

g1g2 各条件の関係性が見やすくなります。

2.4.9. mp_0023 :関係演算子の記述方法

ルール ID : タイトル mp_0023 : 関係演算子の記述方法

ルール

Page 23: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

23

サブ ID 記述内容 カスタムパラメーター

a1 関係演算子を変数と定数に使用する場合、定数は右辺に記述し

ます。

-

【正】

foo = 10; if bar >= foo ret1=1; end

【誤】

foo = 10; if foo <= bar ret1=1; end

a2 関係演算子を変数と定数に使用する場合、定数は左辺に記述し

ます。

-

【正】

foo = 10; if foo <= bar ret1=1; end

【誤】

foo = 10; if bar >= foo ret1=1; end

b 論理定数(true,false)との関係演算は行いません。 -

【正】

% flgは論理定数 if flg ret1 = 1; end

if ~flg ret2 = 1; end

if strcmp(text, '文字列') ret3 = 1; end

【誤】

% flgは論理定数 if flg == true ret1 = 1; end

if flg == false ret2 = 1; end

if strcmp(text, '文字列') == true ret3 = 1; end

根拠

サブ ID 記述内容

a1a2 書式を統一することで、条件式の可読性が向上します。

b 論理定数との演算は冗長な表現となり、可読性が低下します。

2.5. 関数

2.5.1. mp_0024 :無名関数の使用方法

ルール ID : タイトル mp_0024 : 無名関数の使用方法

ルール

サブ ID 記述内容 カスタムパラメーター

a1 無名関数は使用しません。 -

【正】

function ret1 = func1 【誤】

function ret1 = func1

Page 24: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

24

ret1 = sqr(5); end function ret = sqr(x) ret = x.^2; end

sqr = @(x) x.^2; ret1 = sqr(5); end

a2 cellfun、arrayfun、structfun、varfun、spfun に限定して無名関数

を使用します。

-

【正】

function ret1 = func1 A = {rand(3)}; B = {rand(5)}; ret1 = cellfun(@(x,y) x > y, A, B, 'ErrorHandler', @errorfun, ...

'UniformOutput', false); end function result = errorfun(S, varargin)

warning(S.identifier, S.message); result = NaN; end

根拠

サブ ID 記述内容

a1 無名関数を使用せず関数の書式を統一することにより、可読性が向上します。

a2 無名関数を使用することにより、プログラムの行数を低減します。また処理効率が向上し

ます。

2.5.2. mp_0025 :関数の呼び出し方法

ルール ID : タイトル mp_0025 : 関数の呼び出し方法

ルール

サブ ID 記述内容 カスタムパラメーター

a 関数を呼び出す際は関数構文を使用します。 -

【正】

peaks(40); grid('off'); ret = 2 * pi();

【誤】

peaks(40); grid off; ret = 2 * pi;

b 関数内で呼び出される関数の階層数は制限値以下にします。

<例外>

以下の階層は 0 としてカウントします。

・外部の MATLAB コードファイルのラッパー関数

以下はカウントから除外します。

・sqrt, logなどの MATLAB 組み込み関数

・共通に使用されるカスタム ユーティリティ関数

・階層数

Page 25: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

25

c 関数は、直接的または間接的に、自分自身を呼び出してはいけ

ません。

-

根拠

サブ ID 記述内容

a 関数の呼び出し方法について、コマンド構文と関数構文の混在を避けることにより可読性

が向上します。

b 関数内で呼び出される関数の階層数が多い場合は機能の全体像の把握が困難になりま

す。

c MATLAB では再帰によって致命的な誤動作が起きる懸念はありませんが、再帰呼び出し

を行うプログラムは挙動が判りにくく可読性が低下します。

2.5.3. mp_0026 :プライベート関数の使用方法

ルール ID : タイトル mp_0026 : プライベート関数の使用方法

ルール

サブ ID 記述内容 カスタムパラメーター

a 同一フォルダー内からのみ使用する MATLAB コードファイル

は、private フォルダーに配置して、プライベート関数にします。

-

根拠

サブ ID 記述内容

a 関数のスコープを限定することにより、プログラムの誤使用を防ぎます。

2.5.4. mp_0027 :関数の戻り値の記述方法

ルール ID : タイトル mp_0027 : 関数の戻り値の記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

a 関数の戻り値が複数ある場合は”,(コンマ)”で区切ります。 -

【正】

function [ret1, ret2] = func1(arg1, arg2)

【誤】

function [ret1 ret2] = func1(arg1, arg2)

根拠

サブ ID 記述内容

a 関数の書式を統一することにより、可読性、保守性が向上します。

2.5.5. mp_0028 :入れ子関数の不使用

ルール ID : タイトル mp_0028 : 入れ子関数の不使用

ルール

サブ ID 記述内容 カスタムパラメーター

a 入れ子関数は使用しません。 -

【誤】

関数 func2 は関数 func1 の入れ子関数です。関数 func1 の戻り値は ret1=3 となります。

Page 26: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

26

function [ret1,ret2] = func1(arg1) ret1 = 1; ret2 = func2;

function ret3 = func2 ret1 = 3; ret3 = arg1; end end

根拠

サブ ID 記述内容

a

入れ子関数を作成すると関数がどこに定義されているか分かりにくくなります。また、引数

で値を受け渡ししなくても同じ変数を読み書き可能なため、処理内容が把握しにくくなりま

す。

2.5.6. mp_0029 :関数定義の記述方法

ルール ID : タイトル mp_0029 : 関数定義の記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

a1 関数定義で引数がない場合、関数名の後ろに()をつけます。 -

【正】

()を省略しません。

function foo = func1()

【誤】

()を省略しています。

function foo = func2

a2 関数定義で引数がない場合、関数名の後ろの()は省略します。 -

【正】

()を省略します。

function foo = func1

【誤】

()を省略していません。

function foo = func2()

根拠

サブ ID 記述内容

a1a2 関数の書式を統一することにより、関数の見分けがつきやすくなり、可読性が向上します。

2.5.7. mp_0030 :関数の戻り値の型

ルール ID : タイトル mp_0030 : 関数の戻り値の型

ルール

サブ ID 記述内容 カスタムパラメーター

a 戻り値のある関数を作成する場合、戻り値の型を一定とします。 -

【正】

function ret1 = func1(arg1) if arg1 % ret1はセル配列となる ret1 = {1}; else % ret1はセル配列となる

【誤】

function ret1 = func1(arg1) if arg1 % ret1はdouble型となる ret1 = 1; else % ret1はセル配列となる

Page 27: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

27

ret1 = {1, 2, 3}; end end

ret1 = {1, 2, 3}; end end

根拠

サブ ID 記述内容

a

戻り値の型が変化すると、戻り値を使用する際に型の確認が必要となります。また、使用

方法を間違えると意図通りの動作になりません。

例えば find_system では戻り値の数や引数によって、戻り値の型が char 型、cell 型、

double 型に変わり、戻り値の使用前に確認が必要となります。

2.5.8. mp_0031 :開発環境ツール作成時の関数使用

ルール ID : タイトル mp_0031 : 開発環境ツール作成時の関数使用

ルール

サブ ID 記述内容 カスタムパラメーター

a 開発環境ツールはスクリプトを用いず、関数で機能を実現しま

す。

-

根拠

サブ ID 記述内容

a

スクリプトで使用するワークスペースはベースワークスペースになります。そのためユーザ

ーによってスクリプトで使用する変数の書き換えが容易にできてしまい、他方で、スクリプト

によりユーザー定義の変数が書き換えられる可能性が高くなります。

2.5.9. mp_0032 :関数ヘッダー情報

ルール ID : タイトル mp_0032 : 関数ヘッダー情報

ルール

サブ ID 記述内容 カスタムパラメーター

a 関数のヘッダーに必要な情報を記述します。

<参考>

記述項目としては概要、処理内容、I/O、管理情報などがありま

す。

必要に応じてメイン関数とサブ関数で記述項目の組み合わせを

変更してください。

・関数ヘッダー部の記

述項目

【正】

function ret = sample(arg1) % 概要 % sampleプログラム % 処理内容 % arg1とfooを加算し値を返す % 引数 % arg1 : 第1項 % 戻り値 % ret : 加算結果

% 変更履歴 % ------------------------------- % 2018/3/14 新規作成

Page 28: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

28

% ------------------------------- % 2018/3/30 コメント追加

foo = 3; ret = arg1 + foo;

end

根拠

サブ ID 記述内容

a 共有すべき情報を明示することにより、可読性、保守性、移植性が向上します。

2.5.10. mp_0040 :関数の戻り値の使用

ルール ID : タイトル mp_0040 : 関数の戻り値の使用

ルール

サブ ID 記述内容 カスタムパラメーター

a1 関数が関数外に及ぶスコープを持つ変数やデータ(ファイル、

GUIオブジェクト等)を書き換える場合のみ、関数の戻り値は変

数に代入してから使用します。

-

a2 関数の戻り値は必ず変数に代入してから使用します。 -

根拠

サブ ID 記述内容

a1a2

関数の戻り値を直接使用することは文法的には間違いではありませんが、関数の評価順

序により処理結果が異なる場合があります。また、関数の戻り値を演算で使用している箇

所において、戻り値を直接演算に使用している場合よりも可読性が向上します。

2.5.11. mp_0033 :関数の入力変数

ルール ID : タイトル mp_0033 : 関数の入力変数

ルール

サブ ID 記述内容 カスタムパラメーター

a 関数の入力変数の内容を変更しません。 -

【正】

function ret1 = func1(arg1) ret1 = arg1; ret1(end + 1) = now; end

【誤】

function arg1 = func1(arg1) arg1(end + 1) = now; end

根拠

サブ ID 記述内容

a 入力変数の内容を変更しないことで、値が特定しやすくなり、可読性が向上します。

2.5.12. mp_0034 :関数の行数

ルール ID : タイトル mp_0034 : 関数の行数

ルール

サブ ID 記述内容 カスタムパラメーター

a 関数の行数は制限値以下にします。 ・行数

Page 29: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

29

根拠

サブ ID 記述内容

a 一つの関数の行数が多い場合は機能の把握と保守が困難になります。機能毎に切り分け

を行うことで、機能の理解が深まり、変更の影響範囲を限定的にできます。

2.6. MATLAB組み込み関数の使用方法

2.6.1. mp_0035 :戻り値の型が不定の MATLAB組み込み関数の記述方法

ルール ID : タイトル mp_0035 : 戻り値の型が不定の MATLAB 組み込み関数の記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

a MATLAB 組み込み関数を使用する際、戻り値の型が不定となる

場合は、戻り値を評価し、その型に応じた処理を行います。

-

【正】

LineH = find_system(gcs, ... % この使い方では戻り値はdouble型のみ→評価不要 'FindAll','on','Type','Line','DstPortHandle',-1); SrcPortH = get_param(LineH,'SrcPortHandle');% この使い方では戻り値の型不定 if iscell(SrcPortH) % LineHが0個 or 2個以上の場合、SrcPortHはセル型 delete_line(LineH([SrcPortH{:}] ~= -1)); else % LineHが1個の場合、SrcPortHはdouble型 delete_line(LineH(SrcPortH ~= -1)); end

【誤】

LineH = find_system(gcs, ... % この使い方では戻り値はdouble型のみ→評価不要 'FindAll','on','Type','Line','DstPortHandle',-1); SrcPortH = get_param(LineH,'SrcPortHandle');% この使い方では戻り値の型不定 delete_line(LineH([SrcPortH{:}] ~= -1)); % LineH が 1個の場合、エラー

根拠

サブ ID 記述内容

a 戻り値の型が不定の場合、状況によって戻り値の型が変わり、予期しないエラーが発生す

る可能性があります。

2.6.2. mp_0036 :existの記述方法

ルール ID : タイトル mp_0036 : exist の記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

a existを使用する場合、kind 引数を指定します。 -

【正】

ret1 = exist('name','dir'); % ret1 == 7 ret2 = exist('name','file'); % ret2 == 2

【誤】

ret1 = exist('name'); % ret1 == 7 (評価順の低い 2は出力されない)

Page 30: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

30

根拠

サブ ID 記述内容

a

exist(‘name’) を実行すると、name が複数カテゴリに存在する場合でも、exist は評価順に

従い 1 つしか戻り値を返さないため、評価順の低いカテゴリの情報が欠落します。そのた

め、ユーザーは情報の欠落に気付きにくくなります。

2.6.3. mp_0037 :文字列比較関数の記述方法

ルール ID : タイトル mp_0037 : 文字列比較関数の記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

a 文字列の比較には strcmp を使用します(isequal や”==“は使用

しません)。

-

前提:check_str = 'temp' 【正】

ret = strcmp(check_str, 'test'); % ret == 0

【誤】

ret = isequal(check_str, 'test'); % ret == 0

【誤】

ret = all(check_str == 'test'); % ret == 0 【誤】

文字配列の比較結果が出力される

ret = check_str == 'test'; % ret == 1 1 0 0

前提:check_str = 'A' 【正】

ret = strcmp(check_str, 65); % ret == 0

【誤】

誤って引数に数値の65を入力した場合、'A'のASCIIコードが65であるため、

等価と判定される

ret = isequal(check_str, 65); % ret == 1 前提:check_str = 'temp' 【正】

ret = strcmp(check_str, 't'); % ret == 0 【誤】

配列比較の際、't'は'tttt'に拡張され、その状態での比較結果が出力される

ret = check_str == 't'; % ret == 1 0 0 0

根拠

サブ ID 記述内容

a

使用関数を限定することで可読性が向上し、プログラムの誤動作防止となります。

isequal, ‘==‘を使用した場合、比較対象によっては意図しない結果が出力される可能性が

あります。

2.6.4. mp_0038 :ファイル操作関数の記述方法

ルール ID : タイトル mp_0038 : ファイル操作関数の記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

Page 31: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

31

a fopen を使用して開いたファイルは、fclose を使用して閉じます。 -

【正】

fileID = fopen('file.m'); : fclose(fileID);

b fopen を使用してファイルを開いている状態で、同一ファイルに対

し fopen を使用しません。

-

【誤】

fileID = fopen('file.m'); fileID = fopen('file.m'); % fileIDが別の値で上書きされる

: fclose(fileID); % 上書き後のfileIDに対しfcloseを使用しても、

% file.m は上書き前の fileID で開いた状態を維持している

c fopen 使用時に読み取り用のファイルアクセスタイプ’r’を指定し

た場合、その読み取り用ファイルに対し fprintf, fwrite を使用しま

せん。

<参考>

ファイルアクセスタイプのデフォルト値は’r’のため、未指定の場

合は読み取り用となり本ルールの対象となります。

-

【正】

fileID = fopen('file.txt', 'w'); fprintf(fileID, 'Hello,World!'); fclose(fileID);

【誤】

fileID = fopen('file.txt'); % アクセスタイプを指定しない場合、

% デフォルト値は読み取り用の'r' fprintf(fileID, 'Hello,World!'); % 実行しても書き込みできない fclose(fileID);

根拠

サブ ID 記述内容

a ファイルを閉じていない場合、そのファイルを意図せず書き換える可能性があります。

b

fopen を使用してファイルを開いている状態で、そのファイルを閉じる前に再度 fopen を使

用すると、複数の異なるファイル ID が取得されます。

複数の異なるファイル ID で同一ファイルを操作できるようになり、設計者の意図しないとこ

ろでファイルが操作される可能性があります。

c 読み取り用に開いたファイルに書き込み操作を行うと書き込むことができませんが、エラー

や警告が出力されず、プログラムの誤りに気付きにくくなります。

2.6.5. mp_0039 :モデルコンパイルの記述方法

ルール ID : タイトル mp_0039 : モデルコンパイルの記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

Page 32: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

32

a xxxxx([], [], [], ‘compile’)コマンドでモデルシミュレーションのコン

パイルフェーズを実行する場合、xxxxx([], [], [], ‘term’)コマンド

で終了させます。

(xxxxx = モデル名)

-

【正】

try % モデルのコンパイルフェーズを実行 xxxxx([], [], [], 'compile') % コンパイルデータ取得 ・・・ % モデルのコンパイルフェーズを終了

xxxxx([], [], [], 'term') catch exception

% モデルのコンパイルフェーズを終了 xxxxx([], [], [], 'term') disp(exception.message); end

根拠

サブ ID 記述内容

a モデルのコンパイル中にツールが異常終了した場合、モデルがロック状態になり、モデル

を閉じたり、MATLAB を終了することができなくなります。

2.7. 変数

2.7.1. mp_0041 :変数の初期化

ルール ID : タイトル mp_0041 : 変数の初期化

ルール

サブ ID 記述内容 カスタムパラメーター

a1 変数は関数の冒頭で初期化します。 -

【正】

function ret = func() foo = 0; bar = 1; ret = func1(foo); ret = ret + bar;

【誤】

function ret = func() foo = 0; ret = func1(foo); bar = 1; ret = ret + bar;

a2 関数の出力変数は関数の冒頭で初期化します。 -

【正】

function ret = func(arg) ret = 0; if now < arg ret = arg - now; else ret = 0;

【誤】

function ret = func(arg) if now < arg ret = arg - now; else ret = 0; end

Page 33: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

33

end

b サイズが確定している変数は、初期化時にメモリ領域を確保しま

す。

-

【正】

foo = cell(2, 4);

【誤】

foo = {};

根拠

サブ ID 記述内容

a1 初期化処理を一箇所にまとめることにより可読性が向上します。

a2 出力変数が未定義のまま関数が終了することがなくなり、潜在的な不具合を防止します。

b プログラムの処理速度が向上します。

2.7.2. mp_0042 :グローバル変数の使用方法

ルール ID : タイトル mp_0042 : グローバル変数の使用方法

ルール

サブ ID 記述内容 カスタムパラメーター

a1 グローバル変数は使用しません。 -

a2 複数の関数で使用される場合に限り、グローバル変数を使用し

ます。

-

根拠

サブ ID 記述内容

a1 グローバル変数は、使用範囲が不明確になり保守性が低下します。

a2 グローバル変数を必要最小限とすることで、保守性への影響を最小限にします。

2.7.3. mp_0043 :未使用の変数

ルール ID : タイトル mp_0043 : 未使用の変数

ルール

サブ ID 記述内容 カスタムパラメーター

a 未使用の変数を定義しません。

使用しない関数の戻り値を記述する必要がある場合は、”~(チル

ダ)”を記述します。

関数内で使用しない入力変数を記述する必要がある場合は、”

~(チルダ)”を記述します。(規定された入力引数を持つコールバ

ック関数など)

-

【正】

[~ , ret1] = func1(arg1); foo = ret1 + 1;

【誤】

bar = 10; % barは未使用 [tmp , ret1] = func1(arg1); % tmpは未使用 foo = ret1 + 1;

根拠

Page 34: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

34

サブ ID 記述内容

a 未使用の変数が存在すると、可読性、保守性が低下します。

2.7.4. mp_0044 :数値定数の記述方法

ルール ID : タイトル mp_0044 : 数値定数の記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

a 数値定数は、定数値で初期化した変数を使って記述します。

この初期化以外の演算では、数値の直値(マジックナンバー)は

記述しません。

<例外>

0,1 は数値の直値を記述できます。

【正】

foo = 10; for k = 1:(length(arg1) - 1)

if (arg1(k) > 0) && (arg1(k) < foo) ret1(end + 1) = arg1(k) + arg1(k + 1); end end

【誤】

if foo > 10 bar = 50; end

根拠

サブ ID 記述内容

a 数値の直値からは、その数値の持つ意味が読み取れないため、可読性が低下します。ま

た、同じ値を同じ意味で複数の箇所に記述している場合、値の変更に手間がかかります。

2.7.5. mp_0045 :変数の型変更

ルール ID : タイトル mp_0045 : 変数の型変更

ルール

サブ ID 記述内容 カスタムパラメーター

a 既存の変数に、その変数と異なる型のデータを代入しません。 -

【正】

if ischar(arg1) ret1 = {arg1}; elseif iscell(arg1)

ret1 = arg1; else

ret1 = {}; end

【誤】

if ischar(arg1)

Page 35: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

35

arg1 = {arg1}; % arg1はchar型なのにcell型として代入 elseif ~iscell(arg1)

arg1 = {}; % arg1はcell型ではなのにcell型として代入 end

根拠

サブ ID 記述内容

a 変数の型が途中で変わると可読性が低下します。

2.7.6. mp_0046 :配列インデックスの記述方法

ルール ID : タイトル mp_0046 : 配列インデックスの記述方法

ルール

サブ ID 記述内容 カスタムパラメーター

a 配列インデックスで配列番号を計算しません。

<例外>

・ endに対する加減算

・ コロン演算子の使用

-

【正】

foo = rand(1, 10);

k = 1;

m = 2 * k - 1;

foo(m) = 1;

foo(end - 1) = 2;

【誤】

foo = rand(1, 10);

k = 1;

foo(2 * k - 1) = 1;

b 新規の配列変数(空の既存配列変数を含む)に対し、途中のイン

デックスからの代入をしません。

-

【正】

foo = 1:10;

【誤】

foo(2:10) = 2:10;

c 既存の空でない配列変数に対し、既存のインデックス範囲外に

代入する場合は、既存のインデックス範囲から隙間ができない

範囲に代入します。

-

根拠

サブ ID 記述内容

a 配列インデックスで配列番号を計算すると可読性が低下します。

bc 途中のインデックスから代入した場合の隙間の値についての仕様を知らないと実行結果

が分からなくなり、可読性が低下します。

2.8. その他

2.8.1. mp_0047 :空でない文が満たすべき条件

ルール ID : タイトル mp_0047 : 空でない文が満たすべき条件

ルール

サブ ID 記述内容 カスタムパラメーター

Page 36: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

36

a 空でない文は、次のいずれかの条件を満たさなければなりませ

ん。

・文の実行方法に関わらず、一つ以上の副作用があること。

・制御フローを変更する機能があること。

-

【誤】

foo; bar == 1;

根拠

サブ ID 記述内容

a

空でない文はデータの値の変更や、制御フローの変更を目的として記述されるものであ

り、実行結果に何かしらの影響を与えるものです。それらに該当しない文は本来記述する

必要がなく、設計者の意図通りとなっていない可能性があります。

2.8.2. mp_0048 :実行できない文

ルール ID : タイトル mp_0048 : 実行できない文

ルール

サブ ID 記述内容 カスタムパラメーター

a どこからも実行できない文を記述しません。 -

【正】

function res = func1(foo) bar1 = 1; bar2 = 2; bar3 = 3; switch(foo) case bar1 res = bar2; case bar2 res = bar3; case bar3 res = bar1; otherwise res = 0; end % 以下の文は到達可能 res = res * 10; end

【誤】

function res = func(foo) bar1 = 1; bar2 = 2; bar3 = 3; switch(foo) case bar1 res = bar2; case bar2 res = bar3; case bar3 res = bar1; otherwise res = 0; end % 呼び出し元の関数に制御戻る return % 以下の文は常に到達不可能 res = res * 10; end

根拠

サブ ID 記述内容

a 実行できない文は存在理由が不明で可読性が低下します。

2.8.3. mp_0049 :ゼロによる除算

ルール ID : タイトル mp_0049 : ゼロによる除算

ルール

Page 37: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

37

サブ ID 記述内容 カスタムパラメーター

a ゼロ除算を禁止します。

(除算には、mod, rem も含まれます)

【正】

% ゼロ除算が発生しえない場合

foo = -10; ret1 = bar / foo;

【誤】

ret1 = bar / foo; ret2 = mod(bar, foo); ret3 = rem(bar, foo);

if foo ~= 0 % 通常の処理場合 ret1 = bar / foo; ret2 = mod(bar, foo); ret3 = rem(bar, foo); else % ゼロ除算が発生する場合 ret1 = inf; ret2 = bar; ret3 = nan; end

根拠

サブ ID 記述内容

a MATLAB 環境でのゼロによる除算結果を理解していないと実行結果が分からなくなり、可

読性が低下します。

2.8.4. mp_0050 :文字列の算術演算

ルール ID : タイトル mp_0050 : 文字列の算術演算

ルール

サブ ID 記述内容 カスタムパラメーター

a 文字列を直接算術演算しません。 ‐

【正】

foo = double('a') - double('A');

【誤】

foo = 'a' - 'A';

根拠

サブ ID 記述内容

a 明示的に数値型に変換してから演算することで可読性が向上します。

Page 38: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

38

3. ガイドライン別表

ID:タイトル サブID 最終更新 モデル対応ルール MISRA 対応 ID

mp_0001:MATLAB コードファイルの命名方法

a Ver1.0

b Ver1.0

c Ver1.0

d Ver1.0

e Ver1.0

mp_0002:フォルダー名に使用できる文字 a Ver1.0

b Ver1.0

c Ver1.0

d Ver1.0

mp_0003:識別子の命名 a Ver1.0

b Ver1.0

c Ver1.0

d Ver1.0

e Ver1.0

f Ver1.0

g Ver1.0

mp_0004:エディター設定 a Ver1.0

mp_0005:インデント幅の統一 a Ver1.0

mp_0006:複数行にわたる実行文インデント a Ver1.0

mp_0007:実行文の記述方法 a Ver1.0 ○(Ver4.0 より移管)

b Ver1.0 ○(Ver4.0 より移管)

mp_0008:括弧の書式 a Ver1.0

b Ver1.0

c Ver1.0 ○(Ver4.0 より移管)

mp_0009:構造体の記述方法 a Ver1.0

mp_0010:演算子の優先順位の記述方法 a Ver1.0 ○(Ver4.0 より移管)

mp_0011:半角スペースの挿入方法 a Ver1.0 ○(Ver4.0 より移管)

b Ver1.0

c1 Ver1.0

c2 Ver1.0

mp_0012:コメントの記述方法 a Ver1.0 ○(Ver4.0 より移管)

mp_0013:一時的に挿入するコードの記述方法 a Ver1.0

mp_0014:小数点の表現 a Ver1.0

mp_0015:コントロールステートメントのインデント a Ver1.0

mp_0016:コントロールステートメントのネスト数 a Ver1.0 ○(Ver4.0 より移管)

mp_0017:コントロールステートメントのコメント a Ver1.0

b Ver1.0

c Ver1.0

mp_0018:ループ構文の記述方法 a Ver1.0

Page 39: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

39

b Ver1.0

mp_0019:try/catch ステートメントの記述方法 a Ver1.0

mp_0020:Switch/Case ステートメントの記述方法 a Ver1.0 ○(Ver4.0 より移管)

b Ver1.0

c Ver1.0

mp_0021:分岐構文の最終分岐 a Ver1.0

b Ver1.0

mp_0022:条件式の記述方法 a Ver1.0 ○(Ver4.0 より移管)

b Ver1.0

c Ver1.0

d1 Ver1.0

d2 Ver1.0

d3 Ver1.0

e1 Ver1.0 ○(Ver4.0 より移管)

e2 Ver1.0

f Ver1.0

g1 Ver1.0 ○(Ver4.0 より移管)

g2 Ver1.0 ○(Ver4.0 より移管)

mp_0023:関係演算子の記述方法 a1 Ver1.0 ○(新規)

a2 Ver1.0 ○(新規)

b Ver1.0

mp_0024:無名関数の使用方法 a1 Ver1.0

a2 Ver1.0

mp_0025:関数の呼び出し方法 a Ver1.0

b Ver1.0 ○(Ver4.0 より移管)

c Ver1.0 MISRA-C:2012

R17.2

mp_0026:プライベート関数の使用方法 a Ver1.0

mp_0027:関数の戻り値の記述方法 a Ver1.0

mp_0028:入れ子関数の不使用 a Ver1.0

mp_0029:関数定義の記述方法 a1 Ver1.0

a2 Ver1.0

mp_0030:関数の戻り値の型 a Ver1.0

mp_0031:開発環境ツール作成時の関数使用 a Ver1.0

mp_0032:関数ヘッダー情報 a Ver1.0 ○(Ver4.0 より移管)

mp_0040:関数の戻り値の使用 a1 Ver1.0

a2 Ver1.0 ○(Ver4.0 より移管)

mp_0033:関数の入力変数 a Ver1.0

MISRA-C:2012

R17.8

mp_0034:関数の行数 a Ver1.0 ○(Ver4.0 より移管)

mp_0035:戻り値の型が不定の MATLAB

組み込み関数の記述方法 a Ver1.0

Page 40: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

40

mp_0036:existの記述方法 a Ver1.0

mp_0037:文字列比較関数の記述方法 a Ver1.0

mp_0038:ファイル操作関数の記述方法 a Ver1.0

MISRA-C:2012

R22.1

b Ver1.0 MISRA-C:2012

R22.3

c Ver1.0 MISRA-C:2012

R22.4

mp_0039:モデルコンパイルの記述方法 a Ver1.0

mp_0041:変数の初期化 a1 Ver1.0

a2 Ver1.0

b Ver1.0

mp_0042:グローバル変数の使用方法 a1 Ver1.0

a2 Ver1.0

mp_0043:未使用の変数

a Ver1.0

MISRA-C:2012

R2.3, R2.7,

R17.7

mp_0044:数値定数の記述方法 a Ver1.0

mp_0045:変数の型変更 a Ver1.0

MISRA-C:2012

R9.4

mp_0046:配列インデックスの記述方法 a Ver1.0 ○(Ver4.0 より移管)

b Ver1.0 MISRA-C:2012

R9.3

c Ver1.0

mp_0047:空でない文が満たすべき条件 a Ver1.0 ○(新規)

mp_0048:実行できない文 a Ver1.0

MISRA-C:2012

R2.1

mp_0049:ゼロによる除算 a Ver1.0

mp_0050:文字列の算術演算 a Ver1.0

MISRA-C:2012

R10.2

Page 41: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

41

4. ガイドライン用語説明 ガイドラインのルール本文のなかで、解釈の幅が広いと思われる用語について、ガイドラインとしての意味を

定義します。

用語 ガイドライン上の定義

コントロールステートメント if、while、switchなどの制御構文。

実行文 コントロールステートメント以外のステートメント。

MATLAB組み込み関数 MATLABの関数、スクリプト。

MATLAB予約語 MATLABキーワード、及び、MATLAB組み込み関数。

関数構文 関数名の後にかっこで囲ったコンマ区切りの引数を与える構文。

例) fcnname(arg1, arg2)

コマンド構文 関数名の後にスペースで区切った引数を与える構文。

例) fcnname arg1 arg2

プライベート関数 privateフォルダーに格納された関数。

MATLABコードファイル 拡張子「m」のファイル。

識別子 変数、関数、クラス。

リマインダーコメント MATLABコードファイル内で、後に改善・完成・更新するときに、対象を

簡単に検索できるように記載する注釈。

モデルのコンパイル シミュレーション実行時に行われる実行可能形式への変換。

デバッグコード デバッグや、一時的な対策の為に挿入するコード。

Page 42: MATLAB® PROGRAMMING GUIDELINES Version …jmaab.mathworks.jp/deliverables/Programming_Guideline...2018/03/30  · 1. はじめに 1.1. MATLABプログラミングガイドラインとは…

© Copyright 2018 JMAAB. All rights reserved.

42

5. 更新履歴

更新日 内容

2018.03.31 JMAAB Initial document Release, Version 1.0(Jp)

5.1. JMAABスタイルガイドライン編集委員

■ JMAAB MATLABプログラミングガイドライン編集委員 会社名

Ver1.0

アイシン・コムクルーズ

オムロンオートモーティブエレクトロニクス

小松製作所

ダイハツ工業

マツダ

三菱自動車工業

三菱電機

両毛システムズ

サポート:マスワークスジャパン

株式会社省略、参加メンバーを五十音順に掲載