この記事には独自研究が含まれているおそれがあります。 |
行番号(ぎょうばんごう、英: line number / row number)とは、テキストファイルやスプレッドシートの各行に割り振られる番号である。
また、古典的なプログラミング言語の中には行頭に番号を打つことで命令文を区切る方式の仕様となっているものがあり、FORTRANや初期のBASIC等に見られる。
プレーンテキストファイルの場合は、一般的にLFやCR+LFなどの改行コードごとに行が区切られ、テキストエディターではこの区切りをもとにして0または1から始まる行番号(論理行番号)が内部的に割り振られる。ほとんどのテキストエディターは画面左側に行番号を表示でき、表示/非表示を切り替えることもできる。カーソル位置の行番号と桁番号[注釈 1](英: column number)はステータスバーなどに表示される。プログラミング言語のソースコードはプレーンテキストによって記述されるが、言語処理系(コンパイラーやインタープリター)はエラーや警告のメッセージを該当箇所の行番号と桁番号を含む形で出力し、またデバッガーなどが参照するシンボル情報はオブジェクトコードとソースコードを対応付けるときにソースコードの行番号を利用する。統合開発環境に搭載されているコードエディターも、行番号を表示したり[1]、指定した行位置にジャンプしたりする機能を備えている[2]。
しかし、ウィンドウの幅に応じて自動的に行の折り返し表示をするとき、設定によって見かけの行番号(表示行番号)を画面左側に表示できるものも存在する[3]。この行折り返し機能と見かけの行番号を最初に搭載したのは、メガソフトによる国産テキストエディターMIFESだった。これらは日本語の文字原稿をワードプロセッサーで作成するときに便利な機能であり、日本語のテキストエディターでは欠かせないものだったため、プログラミング用途以外でも人気を博した[4]。Microsoft Wordなどにも、改行ではなく文書の幅に応じた折り返しに基づいて行番号を文書中に表示できる機能が搭載されている[5]。
表計算ソフト(スプレッドシート)で使われるデータ構造は、m×nの2次元の表形式だが、数学の行列に見立てて、縦方向(Y方向)の番号は行番号(英: row number)、横方向(X方向)の番号は列番号(英: column number)と呼ばれる。ただし画面表示上は、列番号には数値ではなくAから始まるアルファベットが使われることが多い。
構造化されていない、古典的なBASICのコードは以下のようなものである。
10 A=2
20 B=3
30 PRINT A+B
goto文などジャンプ系の命令文では、ラベルの代用にも使われる。本来FORTRANの行番号はラベルの用途であり、全ての行に番号を付ける必要は無かった。BASICは教育用途の言語であるため、命令が順次処理される様子を分かりやすく表現するようそのような形態になったものと思われる[独自研究?]。この特徴は「BASIC最大の設計ミス」と批判されることが多く、のちに登場した「構造化BASIC」では廃止され、姿を消している[注釈 2]。
40 goto 10
BASICでは命令文を打ち込んで改行すると適度な数字間隔(主に10刻み)で自動に行番号を打ち込む仕様(自動的な行番号の採番はAUTO命令によって制御できる処理系もある)になっているため、行間に命令文を追加する場合には、手動でその間の行番号を打ち込む(10と20の間で15、など)。
また、スクリーンエディタ機能が未発達だった初期のコンピュータのBASICなどは行番号を指定してプログラム内容の表示、編集を行うラインエディタ指向での範囲指定という性格もある。そのためにLIST(指定した行番号の範囲のリストを表示する)、RENUM(行番号を一定間隔で振りなおす)といった命令も存在している。
たとえば、行番号に依存したBASIC処理系で、上記プログラムの行番号20のB=3をB=4と編集する場合には以下のように作業する。
今日[いつ?]では、スクリーンエディタが発達しているため、最近[いつ?]の言語処理系ではこのような作業のために行番号が使われることはなくなった。
行番号とgoto文を用いるスタイルのプログラミングでは、プログラムの規模が大きくなり、goto文をいくつも組み合わせるようになると処理の流れを追いにくくなるなどの欠点があった(→スパゲティプログラム)。PascalやC言語に代表される後発の言語では、文の区切りや複文ブロック、サブルーチンなどの記述仕様を工夫することによって、条件分岐やループ、サブルーチン呼び出しなどでジャンプする際に行番号とgoto文を使用しない専用構文を採用するようになった。これにより、純粋なアルゴリズムに専念した制御構造を記述できるようになり、プログラムの可読性とメンテナンス性を向上させる構造化プログラミングが可能となった。構造化プログラミングに対応したBASIC(構造化BASIC)は行番号を使わない言語仕様となっている。