A 回答 (5件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
○インライン というのは、「何かの中に別の何かを埋め込む」という意味で使われる。
「何」を「何」に「埋め込む」のかは、その文脈で違ってくる。
その説明にあるのは「サブルーチンの処理」を「そのサブルーチンを呼び出す
箇所」に埋め込むもの。
○サブルーチンは一連の処理をまとめて実行できるようにしたもので、
プログラミング言語によって「関数」「メソッド」「プロシージャ」等と名前がついていることがある。
○例えば
「xの関数 f(x) =a・x を a を変えつつグラフにする」
というプログラムを考える。そうすると、次のような感じになる。
コード1: 関数f(x,a) をそのまま使用
/*関数 f(x) 、aを指定できるようにする */
function f(x,a) { return a * x ; }
/* メインルーチン */
...
for(x0 = xmin ; x0 <= xmax ; x0 += step ) {
/* y座標を計算 */
y0 = f(x0,1) ;
/* 座標(x0,y0)にプロット */
....
}
for(x1 = xmin ; x1 <= xmax ; x1 += step ) {
/* y座標を計算 */
y1 = f(x1,2) ;
/* 座標(x1,y1)にプロット */
....
}
これを、 f(x,a) をインラインに展開すると次のようになる
コード2: 関数f(x,a) をインラインに展開する
/* inlineにするので不要
function f(x,a) { return a * x ; }
*/
/* メインルーチン */
...
for(x0 = xmin ; x0 <= xmax ; x0 += step ) {
/* y座標を計算 */
y0 = 1 * x0 ; /* f(x0,1) をinline展開 */
/* 座標(x0,y0)にプロット */
....
}
for(x1 = xmin ; x1 <= xmax ; x1 += step ) {
/* y座標を計算 */
y1 = 2 * x1 ; /* f(x1,2) をinline展開 */
/* 座標(x1,y1)にプロット */
....
}
○プログラミング言語や実行環境によっては、コード1と同じ(または、ほとんど同じ)書き方をしても、コード2のようにインラインに展開されたものして実行するものもある。
・C,C++の関数型マクロ、インライン関数 等
※ 「コンパイラによるコード最適化の手法の一つ」という記述からは、こちらの「言語によるインライン展開」を想定しているように思える
※ 一方「都度直接記述することになる」という記述は コード2 のようなものを想定しているように思える。コンパイラで展開されるのなら「都度直接記述」する必要が(プログラマには)無いから。
○メリット、デメリットは説明にある通り。
加えて、コード2 のような記述が必要となる場合、コードの保守性もデメリットになる。
・実引数(例では x0,1 と x1,2 ) と仮引数x,aとの対応を自分でやらなければならない。
→対応間違いが発生する可能性がある。記述箇所が多ければそれだけ発生する確率が増える。
・「f(x) = ax^2 + 10 のグラフ」に変えることを考える。
コード1では関数f(x,y)の中だけ変えればいい。
→変更忘れ、変更間違いが発生するとしても、1箇所だけ。
コード2では、複数の箇所で変更が必要。
→変更忘れ、変更間違いが発生する確率が増える。
No.3
- 回答日時:
見た目は普通の「関数」ですよ。
Cだと関数の宣言の先頭に inlineって書くだけ。
そうすると、コンパイラに、ちょっとメモリを無駄にして
良いから、関数を「呼び出す」のではなく、関数のコードを
関数を実行する場所に埋め込む
コードを吐いて欲しいと指示したことになる。
でもコンパイラはその指示に従わないかもしれないし、
inlineの指示が無くてもコンパイラの独自の判断で
inline化するかもしれない。
結局のところ、コンパイラの最適化、高速化のヒントに過ぎない
ので、見た目にはほとんど影響しない。
No.2
- 回答日時:
> Javascript の場合はどうなるのか、例が欲しいと思いました。
ん〜〜。
多分JavaScriptにはそれは「ない」?
通常、JavaScriptでインラインって言えば、単にJavaScriptのソースコードファイルを作らないで、HTMLに直書きする事を言うんじゃないのかしらん。
Javascriptの記述方法。インラインと外部ファイルのメリットとは?:
https://cr-note.com/blog08/
例えば、一部の高級言語では、ソース記述してる途中で「アセンブリ言語をぶっこめる」とか言う機能を「インライン」とか呼んだりするけど、そういう事でもないでしょ?言語仕様がそういうのを許してる言語ばっかでもないし。
多分貴方が引っ張ってきた説明のブツは、JavaScriptには無いと思いますね。
いや、でも、プログラミング用語ってメンド臭いね(笑)。同じ名前で違う事指してる事とかちょくちょくあるから。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
JavaScriptの定数名が取り消し...
-
GrapeCityのSpreadについて
-
access でエラーを回避するには?
-
変数名「cur」について
-
pythonで同じコード内で複数の...
-
vba スライサー
-
ペンダントライトのコードの色...
-
1、Rstudioで回帰直線を求める...
-
VBAのフィルター操作
-
ASP.NETのSiteMapPathについて
-
ExcelVBAで「Shift_JIS(MS932)...
-
TVリモコン設定(SMILE KIDS)
-
Microsoft Visual Studio Commu...
-
レポートでグループレベルの変...
-
1日に1人がこなせるプログラム...
-
Accessでの抽出で完全一致。
-
ビジュアルスタジオの警告が出...
-
ACCESSユニオンクエリでORDER B...
-
ホワイトノイズの生成コードに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
JANコードとPOSコードは同じ?
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
オートフィルタで抽出結果に 罫...
-
変数名「cur」について
-
JavaScriptの定数名が取り消し...
-
ACCESSユニオンクエリでORDER B...
-
Exel VBA 別ブックから該当デ...
-
UWSCでMOUSEORG関数が上手く処...
-
COBOLの文法
-
PreviewKeyDownイベントが2回...
-
1、Rstudioで回帰直線を求める...
-
VBAでファイルオープン後にコー...
-
【VB6】実行ファイルとした後、...
-
Nullの使い方が不正です。
-
特定行の背景色を変えたいのですが
-
◾️Excel VBA 統合について Cons...
-
アルファベットに付いて質問し...
-
Excel VBAでOpenTextのFieldInf...
おすすめ情報
以下の内容についての疑問です。
Javascript の場合はどうなるのか、例が欲しいと思いました。
インラインコードとは、プログラミングにおいて、サブルーチンを呼び出すためのコードの代わりに、直接コード内に記述するサブルーチンの内容のこと。
インライン展開と呼ばれている。コンパイラによるコード最適化の手法の一つ。
インラインコードにより、サブルーチンを呼び出す際に行われているレジスタの退避や回復、スタック調整、といった処理が不要。サブルーチンの呼び出しに伴うオーバーヘッドがなくなり、処理の高速化を図れる。特にループ処理が多数存在するプログラムの場合は、インラインコードを行うことで大幅な速度向上が期待できる。
他方、インラインコードを複数の場所で何度も呼び出されるサブルーチンを、都度直接記述することになる。サイズは肥大しやすく、必要なメモリ容量が増大になる。