パラメータ
「パラメータ」の基本的な意味
「パラメータ」とは、ある現象やシステムを特徴づける変数のことである。これらの変数は、システムの挙動や性能を決定する要素となり、最適化や制御において重要な役割を果たす。例えば、物理学における質量や電荷、プログラミングにおける関数の引数、統計学における平均や分散などがパラメータとして扱われる。「パラメータ」の英語表記
「パラメータ」の英語表記は ""parameter"" である。「パラメータ」の類語・類語の意味
変数
「変数」は、数学や物理学などの分野で用いられる概念で、値が変化することができる量を指す。パラメータも変数の一種であるが、パラメータは特にシステムや現象を特徴づける変数として扱われる。係数
「係数」は、数学や物理学において、変数の前に掛けられる定数を指す。係数はパラメータと同様にシステムの性質を決定する要素であるが、係数は定数であり、変数ではない。引数
「引数」は、プログラミングにおいて、関数やメソッドに渡される値を指す。引数はパラメータとして機能し、関数の挙動を決定する。「パラメータ」に関連する用語・知識
パラメータ推定
「パラメータ推定」は、統計学において、観測データからパラメータの値を推定することである。最尤推定やベイズ推定などの手法が用いられる。パラメータチューニング
「パラメータチューニング」は、システムやモデルの性能を向上させるために、パラメータの値を調整することである。機械学習においては、ハイパーパラメータチューニングとも呼ばれる。パラメトリックモデル
「パラメトリックモデル」は、パラメータによって特徴づけられるモデルのことである。対照的に、パラメータを用いないモデルはノンパラメトリックモデルと呼ばれる。「パラメータ」を用いた例文
1. このシミュレーションでは、摩擦係数や空気抵抗などのパラメータを調整して、現実に近い挙動を再現している。 2. 研究者たちは、新しい材料の熱伝導率というパラメータを測定する実験を行った。 3. 機械学習アルゴリズムの性能を向上させるために、学習率や正則化項の強さといったパラメータを調整することが重要である。parameter
「parameter」とは、パラメーター・補助変数・媒介変数のことを意味する英語表現である。
「parameter」とは・「parameter」の意味
「parameter」は、パラメーターや補助変数、媒介変数を意味する名詞である。数学の分野では、式や関数の定義の中で使われる、値が未知の定数のことを指す。統計学の分野では、母集団の特性を表す未知の定数が「parameter」である。ITの分野では、あるシステムやモデム、アルゴリズム、関数などの内部の設定値や条件を表す変数を指す。たとえば、機械学習のアルゴリズムにおいては、モデルの学習率やパッチサイズ、エポック数などが「parameter」にあたる。「parameter」の複数形は「parameters」である。
「parameter」の発音・読み方
「parameter」の発音記号は「pərǽmətər」である。発音に近いカタカナ読みだと「パラマター」になる。「parameter」の語源・由来
「parameter」の語源は、ギリシャ語で横や近くを意味する「para-」と、測定器や基準を意味する「metron」である。元々は数学や物理学の分野において、他の変数とは独立して値が定まる定数のことを指していた。その後、統計学や情報科学技術の分野でも使われるようになったと考えられる。「parameter」の略語
「parameter」の一般的な略語は「param」である。しかし、統計学や機械学習の分野では「prm」が使われることもある。「parameter(媒介変数)」の解説
「parameter(媒介変数)」とは、数学の多様体における曲線や局面において、「parameter(媒介変数)」が自由に動くことによって多様体上の点が移動することを表現するための変数である。たとえば、二次元平面上の点(x、y)に媒介変数tを用いる場合、次のように表現できる。x=f(t)
y=g(t)
この場合、f(t)とg(t)は媒介変数tの関数である。tの値が変化することによって、二次元平面上の点が移動する。
「parameter」と「config」の違い
「parameter」と「config」はどちらもコンピューター科学において重要な単語であり、設定に関連する情報を示す言葉だが、意味は異なる。「parameter」は一般にプログラムやシステムの動作を制御するために使用される変数であり、プログラム実行時に値が変更可能であることが一般的である。一方、「config」はアプリケーションやシステムの設定ファイルに保存される静的な設定情報を指す。これらの設定はアプリケーションの実行前にロードされるため、実行中に変更することはできない。「parameter」を含む様々な用語の解説
「parameter」を含む用語としては、次のようなものが挙げられる。「product parameters」とは
「Product parameters」は、製品の設計や開発において、その製品の機能や性能を定義するために使用されるパラメーターを指す。これらのパラメーターは、製品の品質や信頼性、コスト、生産性、安全性などに大きな影響を与える。
「parameter setting」とは
「parameter setting」は、パラメーター設定のことである。
「parameter estimation」とは
「parameter estimationは、パラメーター推定を指す。統計学や機械学習の分野において、あるモデルのパラメーターをデータから推定することである。
「parameter tuning」とは
「parameter tuning」は、機械学習やシステム開発などにおいてパラメーターの最適地を探索し、システムやモデルの性能を改善することを意味する。
「parameter space」とは
「parameter space」は、パラメーター空間のことである。機械学習や統計学の分野で、あるモデルのパラメーターの全体集合を指す。
「system parameters」とは
「system parameters」は、あるシステムの制御に必要なパラメーターを意味する。
「design parameters」とは
「design parameters」は、ある製品の設計において、その製品の形状やサイズ、素材、機能などを決定するためのパラメーターを指す。
「parameter」の使い方・例文
「parameter」を用いた例文には、次のようなものがある。「In order to optimize the performance of the machine learning model, we need to set the parameters appropriately.(機械学習モデルのパフォーマンスを最適化するには、パラメーターを適切に設定する必要がある)」
「The engineer adjusted the set parameters of the robotic arm to increase its range of motion.(エンジニアは、ロボットアームの設定パラメーターを調整して可動域を広げた)」
「The performance of the algorithm was significantly improved after the parameter tuning process.(パラメーターチューニングの実行後、アルゴリズムのパフォーマンスが大幅に向上した)」
「The parameter values for the statistical model were estimated using maximum likelihood estimation.(統計モデルのパラメーター値は、最尤推定を使用して推定された)」
パラメーター
パラメータ
Parameter クラス
アセンブリ: System.Web (system.web.dll 内)
Parameter クラスは、ASP.NET データ ソース コントロールがデータの選択、フィルタ処理、変更に使用するパラメータ化された SQL クエリ、フィルタ式、またはビジネス オブジェクト メソッド呼び出しのパラメータを表します。Parameter オブジェクトは、ParameterCollection オブジェクトに格納されます。Parameter オブジェクトは実行時に評価され、それらのオブジェクトが表す変数の値をデータ ソース コントロールで使用するメソッドにバインドしてデータとやり取りします。
ControlParameter、CookieParameter、SessionParameter、ProfileParameter、QueryStringParameter など、ASP.NET に提供されるパラメータ クラスは、Web ベースのデータ アプリケーションをビルドするデータ ソース コントロールおよびデータ バインド コントロールで使用します。これらのクラスはデータ ソース コントロールで使用され、Web アプリケーション内の特定の種類の値を、SQL クエリ文字列やビジネス オブジェクト メソッドのパラメータなどに含まれるプレースホルダにバインドします。たとえば、ControlParameter クラスは Web サーバー コントロールのパブリック プロパティをバインドするために使用され、SessionParameter クラスはユーザー セッションの値をバインドするために使用されます。また、QueryStringParameter クラスと CookieParameter クラスは、HttpRequest クラスの値にバインドするために使用されます。独自のカスタム パラメータ型を実装する場合は、基本 Parameter クラスを拡張します。
Parameter オブジェクトは非常に簡単なオブジェクトです。このオブジェクトには、Name プロパティと Type プロパティがあります。このオブジェクトは、宣言によって表すことができ、複数の HTTP 要求にわたり状態を追跡できます。パラメータが値にバインドされたときのために、すべてのパラメータは DefaultValue プロパティをサポートしていますが、この値は実行時に null 参照 (Visual Basic では Nothing) と評価されます。
データ ソース コントロールで Parameter オブジェクトのコレクションを使用する場合、コレクション内でのオブジェクトの順序が重要となります。パラメータが使用されるしくみの詳細については、「SqlDataSource コントロールにおけるパラメータの使用」および「ObjectDataSource コントロールにおけるパラメータの使用」を参照してください。
宣言シナリオで、Parameter オブジェクトを使用して、ListBox コントロールに表示されたデータを DropDownList コントロールの選択された値にバインドする方法を次のコード例に示します。ControlParameter オブジェクトは、フォームの SqlDataSource コントロールの SelectParameters コレクションに追加され、SelectCommand プロパティの "@Title" プレースホルダ テキストに対応します。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <body> <form runat="server"> <p><asp:dropdownlist id="DropDownList1" runat="server" autopostback="True"> <asp:listitem selected>Sales Representative</asp:listitem> <asp:listitem>Sales Manager</asp:listitem> <asp:listitem>Vice President, Sales</asp:listitem> </asp:dropdownlist></p> <asp:sqldatasource id="SqlDataSource1" runat="server" connectionstring="<%$ ConnectionStrings:MyNorthwind%>" selectcommand="SELECT LastName FROM Employees WHERE Title = @Title"> <selectparameters> <asp:controlparameter name="Title" controlid="DropDownList1" propertyname="SelectedValue"/> </selectparameters> </asp:sqldatasource> <p><asp:listbox id="ListBox1" runat="server" datasourceid="SqlDataSource1" datatextfield="LastName"> </asp:listbox></p> </form> </body> </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <body> <form runat="server"> <p><asp:dropdownlist id="DropDownList1" runat="server" autopostback="True"> <asp:listitem selected>Sales Representative</asp:listitem> <asp:listitem>Sales Manager</asp:listitem> <asp:listitem>Vice President, Sales</asp:listitem> </asp:dropdownlist></p> <asp:sqldatasource id="SqlDataSource1" runat="server" connectionstring="<%$ ConnectionStrings:MyNorthwind%>" selectcommand="SELECT LastName FROM Employees WHERE Title = @Title"> <selectparameters> <asp:controlparameter name="Title" controlid="DropDownList1" propertyname="SelectedValue"/> </selectparameters> </asp:sqldatasource> <p><asp:listbox id="ListBox1" runat="server" datasourceid="SqlDataSource1" datatextfield="LastName"> </asp:listbox></p> </form> </body> </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <BODY> <FORM runat="server"> <p><asp:DropDownList id="DropDownList1" runat="server" AutoPostBack="True"> <asp:ListItem Selected>Sales Representative</asp:ListItem> <asp:ListItem>Sales Manager</asp:ListItem> <asp:ListItem>Vice President, Sales</asp:ListItem> </asp:DropDownList></p> <asp:SqlDataSource id="SqlDataSource1" runat="server" ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" SelectCommand="SELECT LastName FROM Employees WHERE Title = @Title"> <SelectParameters> <asp:ControlParameter Name="Title" ControlId="DropDownList1" PropertyName="SelectedValue"/> </SelectParameters> </asp:SqlDataSource> <p><asp:ListBox id="ListBox1" runat="server" DataSourceID="SqlDataSource1" DataTextField="LastName"> </asp:ListBox></p> </FORM> </BODY> </HTML>
プログラム シナリオで、Parameter オブジェクトを使用して、DataGrid コントロールに表示されたデータを DropDownList コントロールの選択された値にバインドするコード例を次に示します。ページが最初に読み込まれたときには、DropDownList コントロールの値は選択されていないため、Parameter オブジェクトの DefaultValue プロパティが使用されます。
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="param1avb.aspx.vb" Inherits="param1avb_aspx" %> <html > <body> <form id="form1" runat="server"> <div> <asp:DropDownList runat="server" AutoPostBack="True" id="DropDownList1"> <asp:ListItem Value="USA">USA</asp:ListItem> <asp:ListItem Value="UK">UK</asp:ListItem> </asp:DropDownList> <asp:DataGrid runat="server" id="DataGrid1" /> </div> </form> </body> </html>
<%@ Page Language="C#" CodeFile="param1acs.aspx.cs" Inherits="param1acs_aspx" %> <html > <body> <form id="form1" runat="server"> <div> <asp:DropDownList runat="server" AutoPostBack="True" id="DropDownList1"> <asp:ListItem Value="USA">USA</asp:ListItem> <asp:ListItem Value="UK">UK</asp:ListItem> </asp:DropDownList> <asp:DataGrid runat="server" id="DataGrid1" /> </div> </form> </body> </html>
<%@ Page Language="VJ#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <SCRIPT runat="server"> private void Page_Load(Object sender, System.EventArgs e) { SqlDataSource sqlSource = new SqlDataSource("Data Source=localhost;" + "Integrated Security=SSPI;Initial Catalog=Northwind;", "SELECT FirstName, LastName FROM Employees WHERE Country = @country;"); ControlParameter country = new ControlParameter(); country.set_Name("country"); country.set_Type(System.TypeCode.String); country.set_ControlID("DropDownList1"); country.set_PropertyName("SelectedValue"); // If the DefaultValue is not set, the DataGrid does not // display anything on the first page load. This is because // on the first page load, the DropDownList has no // selected item, and the ControlParameter evaluates to // String.Empty. country.set_DefaultValue("USA"); sqlSource.get_SelectParameters().Add(country); // Add the SqlDataSource to the page controls collection. get_Page().get_Controls().Add(sqlSource); DataGrid1.set_DataSource(sqlSource); DataGrid1.DataBind(); } //Page_Load </SCRIPT> <HTML> <BODY> <FORM runat="server"> <asp:DropDownList runat="server" AutoPostBack="True" id="DropDownList1"> <asp:ListItem Value="USA">USA</asp:ListItem> <asp:ListItem Value="UK">UK</asp:ListItem> </asp:DropDownList> <asp:DataGrid runat="server" id="DataGrid1" /> </FORM> </BODY> </HTML>
次の分離コード モジュールは、前の Web フォーム ページで使用されます。
Partial Class param1avb_aspx Inherits System.Web.UI.Page Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Dim sqlSource As SqlDataSource sqlSource = New SqlDataSource(ConfigurationManager.ConnectionStrings("MyNorthwind").ConnectionString, "SELECT FirstName, LastName FROM Employees WHERE Country = @country;") Dim country As New ControlParameter() country.Name = "country" country.Type = TypeCode.String country.ControlID = "DropDownList1" country.PropertyName = "SelectedValue" ' If the DefaultValue is not set, the DataGrid does not ' display anything on the first page load. This is because ' on the first page load, the DropDownList has no ' selected item, and the ControlParameter evaluates to ' String.Empty. country.DefaultValue = "USA" sqlSource.SelectParameters.Add(country) ' Add the SqlDataSource to the page controls collection. Page.Controls.Add(sqlSource) DataGrid1.DataSource = sqlSource DataGrid1.DataBind() End Sub 'Page_Load End Class
public partial class param1acs_aspx : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { SqlDataSource sqlSource = new SqlDataSource( ConfigurationManager.ConnectionStrings["MyNorthwind"].ConnectionString , "SELECT FirstName, LastName FROM Employees WHERE Country = @country;"); ControlParameter country = new ControlParameter(); country.Name = "country"; country.Type = TypeCode.String; country.ControlID = "DropDownList1"; country.PropertyName = "SelectedValue"; // If the DefaultValue is not set, the DataGrid does not // display anything on the first page load. This is because // on the first page load, the DropDownList has no // selected item, and the ControlParameter evaluates to // String.Empty. country.DefaultValue = "USA"; sqlSource.SelectParameters.Add(country); // Add the SqlDataSource to the page controls collection. Page.Controls.Add(sqlSource); DataGrid1.DataSource = sqlSource; DataGrid1.DataBind(); } }
Parameter クラスを拡張して、データ バインディング シナリオでデータ ソース コントロールと他のコントロールで使用できる新しいパラメータ型を作成する方法を次のコード例に示します。データ ソース コントロールは、StaticParameter パラメータを使用して、Web フォーム ページ上で宣言されたオブジェクトの値 (通常は文字列) にバインドできます。
Imports System Imports System.ComponentModel Imports System.Security.Permissions Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls Namespace Samples.AspNet <AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Minimal)> _ Public Class StaticParameter Inherits Parameter Public Sub New() End Sub ' The StaticParameter(string, object) constructor ' initializes the DataValue property and calls the ' Parameter(string) constructor to initialize the Name property. Public Sub New(name As String, value As Object) MyBase.New(name) DataValue = value End Sub ' The StaticParameter(string, TypeCode, object) constructor ' initializes the DataValue property and calls the ' Parameter(string, TypeCode) constructor to initialize the Name and ' Type properties. Public Sub New(name As String, type As TypeCode, value As Object) MyBase.New(name, type) DataValue = value End Sub ' The StaticParameter copy constructor is provided to ensure that ' the state contained in the DataValue property is copied to new ' instances of the class. Protected Sub New(original As StaticParameter) MyBase.New(original) DataValue = original.DataValue End Sub ' The Clone method is overridden to call the ' StaticParameter copy constructor, so that the data in ' the DataValue property is correctly transferred to the ' new instance of the StaticParameter. Protected Overrides Function Clone() As Parameter Return New StaticParameter(Me) End Function ' The DataValue can be any arbitrary object and is stored in ViewState. Public Property DataValue() As Object Get Return ViewState("Value") End Get Set ViewState("Value") = value End Set End Property ' The Value property is a type safe convenience property ' used when the StaticParameter represents string data. ' It gets the string value of the DataValue property, and ' sets the DataValue property directly. Public Property Value() As String Get Dim o As Object = DataValue If o Is Nothing OrElse Not TypeOf o Is String Then Return String.Empty End If Return CStr(o) End Get Set DataValue = value OnParameterChanged() End Set End Property ' The Evaluate method is overridden to return the ' DataValue property instead of the DefaultValue. Protected Overrides Function Evaluate(context As HttpContext, control As Control) As Object If context Is Nothing Then Return Nothing Else Return DataValue End If End Function End Class ' StaticParameter End Namespace ' Samples.AspNet
namespace Samples.AspNet { using System; using System.ComponentModel; using System.Security.Permissions; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; [AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)] public class StaticParameter : Parameter { public StaticParameter() { } // The StaticParameter(string, object) constructor // initializes the DataValue property and calls the // Parameter(string) constructor to initialize the Name property. public StaticParameter(string name, object value) : base(name) { DataValue = value; } // The StaticParameter(string, TypeCode, object) constructor // initializes the DataValue property and calls the // Parameter(string, TypeCode) constructor to initialize the Name and // Type properties. public StaticParameter(string name, TypeCode type, object value) : base(name, type) { DataValue = value; } // The StaticParameter copy constructor is provided to ensure that // the state contained in the DataValue property is copied to new // instances of the class. protected StaticParameter(StaticParameter original) : base(original) { DataValue = original.DataValue; } // The Clone method is overridden to call the // StaticParameter copy constructor, so that the data in // the DataValue property is correctly transferred to the // new instance of the StaticParameter. protected override Parameter Clone() { return new StaticParameter(this); } // The DataValue can be any arbitrary object and is stored in ViewState. public object DataValue { get { return ViewState["Value"]; } set { ViewState["Value"] = value; } } // The Value property is a type safe convenience property // used when the StaticParameter represents string data. // It gets the string value of the DataValue property, and // sets the DataValue property directly. public string Value { get { object o = DataValue; if (o == null || !(o is string)) return String.Empty; return (string)o; } set { DataValue = value; OnParameterChanged(); } } // The Evaluate method is overridden to return the // DataValue property instead of the DefaultValue. protected override object Evaluate(HttpContext context, Control control) { if (context.Request == null) return null; return DataValue; } } }
package Samples.AspNet ; import System.* ; import System.ComponentModel.* ; import System.Web.UI.* ; import System.Web.UI.WebControls.* ; public class StaticParameter extends Parameter { public StaticParameter() { } //StaticParameter // The StaticParameter(string, object) constructor // initializes the DataValue property and calls the // Parameter(string) constructor to initialize the Name property. public StaticParameter(String name, Object value) { super(name); set_DataValue(value); } //StaticParameter // The StaticParameter(string, TypeCode, object) constructor // initializes the DataValue property and calls the // Parameter(string, TypeCode) constructor to initialize the Name and // Type properties. public StaticParameter(String name, TypeCode type, Object value) { super(name, type); set_DataValue(value); } //StaticParameter // The StaticParameter copy constructor is provided to ensure that // the state contained in the DataValue property is copied to new // instances of the class. protected StaticParameter(StaticParameter original) { super(original); set_DataValue(original.get_DataValue()); } //StaticParameter // The Clone method is overridden to call the // StaticParameter copy constructor, so that the data in // the DataValue property is correctly transferred to the // new instance of the StaticParameter. protected Parameter Clone() { return new StaticParameter(this); } //Clone // The DataValue can be any arbitrary object and is stored in ViewState. /** @property */ public Object get_DataValue() { return get_ViewState().get_Item("Value"); } //get_DataValue /** @property */ public void set_DataValue(Object value) { get_ViewState().set_Item("Value", value); } //set_DataValue // The Value property is a type safe convenience property // used when the StaticParameter represents string data. // It gets the string value of the DataValue property, and // sets the DataValue property directly. /** @property */ public String get_Value() { Object o = get_DataValue(); if (o == null || !(o instanceof String)) { return String.Empty; } return (String)(o); } //get_Value /** @property */ public void set_Value(String value) { set_DataValue(value); OnParameterChanged(); } //set_Value // The Evaluate method is overridden to return the // DataValue property instead of the DefaultValue. protected Object Evaluate(Control control) { return get_DataValue(); } //Evaluate } //StaticParameter
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
Parameter コンストラクタ ()
アセンブリ: System.Web (system.web.dll 内)
Parameter コンストラクタで作成された Parameter オブジェクトは、すべてのプロパティの既定値を使用して初期化されます。Name プロパティは String.Empty に、Type プロパティは TypeCode.Object に、Direction プロパティは Input に、DefaultValue プロパティは null 参照 (Visual Basic では Nothing) にそれぞれ初期化されます。
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
Parameter コンストラクタ (Parameter)
アセンブリ: System.Web (system.web.dll 内)
Parameter(Parameter) コンストラクタは、Parameter インスタンスのクローンを作成するための protected コピー コンストラクタです。Name、Type、DefaultValue、Direction、ConvertEmptyStringToNull の各プロパティの値は、すべて新しいインスタンスに転送されます。
Parameter クラスを拡張したクラスから Parameter(Parameter) コンストラクタを呼び出して、クラスにオブジェクトの適切なクローン動作を実装する方法を次のコード例に示します。このコード例は Parameter クラスの概要で取り上げているコード例の一部分です。
' The StaticParameter copy constructor is provided to ensure that ' the state contained in the DataValue property is copied to new ' instances of the class. Protected Sub New(original As StaticParameter) MyBase.New(original) DataValue = original.DataValue End Sub ' The Clone method is overridden to call the ' StaticParameter copy constructor, so that the data in ' the DataValue property is correctly transferred to the ' new instance of the StaticParameter. Protected Overrides Function Clone() As Parameter Return New StaticParameter(Me) End Function
// The StaticParameter copy constructor is provided to ensure that // the state contained in the DataValue property is copied to new // instances of the class. protected StaticParameter(StaticParameter original) : base(original) { DataValue = original.DataValue; } // The Clone method is overridden to call the // StaticParameter copy constructor, so that the data in // the DataValue property is correctly transferred to the // new instance of the StaticParameter. protected override Parameter Clone() { return new StaticParameter(this); }
// The StaticParameter copy constructor is provided to ensure that // the state contained in the DataValue property is copied to new // instances of the class. protected StaticParameter(StaticParameter original) { super(original); set_DataValue(original.get_DataValue()); } //StaticParameter // The Clone method is overridden to call the // StaticParameter copy constructor, so that the data in // the DataValue property is correctly transferred to the // new instance of the StaticParameter. protected Parameter Clone() { return new StaticParameter(this); } //Clone
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
Parameter コンストラクタ (String, TypeCode, String)
アセンブリ: System.Web (system.web.dll 内)
Dim name As String Dim type As TypeCode Dim defaultValue As String Dim instance As New Parameter(name, type, defaultValue)
Parameter(String,TypeCode,String) コンストラクタで作成された Parameter オブジェクトは、指定した name パラメータと type パラメータを使用して初期化され、DefaultValue プロパティ値が割り当てられます。Direction プロパティは Input に初期化されます。
Parameter(String,TypeCode,String) コンストラクタを使用して、Update メソッドを呼び出す前に、AccessDataSource コントロールの UpdateParameters コレクションに更新パラメータ オブジェクトを追加する方法を次のコード例に示します。
<SCRIPT runat="server"> Private Sub UpdateRecords(source As Object, e As EventArgs) ' This method is an example of batch updating using a ' data source control. The method iterates through the rows ' of the GridView, extracts each CheckBox from the row and, if ' the CheckBox is checked, updates data by calling the Update ' method of the data source control, adding required parameters ' to the UpdateParameters collection. Dim cb As CheckBox Dim row As GridViewRow For Each row In GridView1.Rows cb = CType(row.Cells(0).Controls(1), CheckBox) If cb.Checked Then Dim oid As String oid = CType(row.Cells(1).Text, String) Dim param1 As New Parameter("date", TypeCode.DateTime, DateTime.Now.ToString()) MyAccessDataSource.UpdateParameters.Add(param1) Dim param2 As New Parameter("orderid", TypeCode.String, oid) MyAccessDataSource.UpdateParameters.Add(param2) MyAccessDataSource.Update() MyAccessDataSource.UpdateParameters.Clear() End If Next End Sub ' UpdateRecords </SCRIPT>
<SCRIPT runat="server"> private void UpdateRecords(Object source, EventArgs e) { // This method is an example of batch updating using a // data source control. The method iterates through the rows // of the GridView, extracts each CheckBox from the row and, if // the CheckBox is checked, updates data by calling the Update // method of the data source control, adding required parameters // to the UpdateParameters collection. CheckBox cb; foreach(GridViewRow row in this.GridView1.Rows) { cb = (CheckBox) row.Cells[0].Controls[1]; if(cb.Checked) { string oid = (string) row.Cells[1].Text; MyAccessDataSource.UpdateParameters.Add(new Parameter("date" ,TypeCode.DateTime,DateTime.Now.ToString())); MyAccessDataSource.UpdateParameters.Add(new Parameter("orderid" ,TypeCode.String,oid)); MyAccessDataSource.Update(); MyAccessDataSource.UpdateParameters.Clear(); } } } </SCRIPT>
<SCRIPT runat="server"> private void UpdateRecords(Object source, System.EventArgs e) { // This method is an example of batch updating using a // data source control. The method iterates through the rows // of the GridView, extracts each CheckBox from the row and, if // the CheckBox is checked, updates data by calling the Update // method of the data source control, adding required parameters // to the UpdateParameters collection. CheckBox cb; for (int iCtr = 0; iCtr < this.GridView1.get_Rows().get_Count(); iCtr++) { GridViewRow row = this.GridView1.get_Rows().get_Item(iCtr); cb = (CheckBox)row.get_Cells().get_Item(0).get_Controls().get_Item(1); if (cb.get_Checked()) { String oid = (String)(row.get_Cells().get_Item(1).get_Text()); MyAccessDataSource.get_UpdateParameters().Add(new Parameter( "date", System.TypeCode.DateTime, System.DateTime.get_Now().ToString())); MyAccessDataSource.get_UpdateParameters().Add(new Parameter( "orderid", System.TypeCode.String, oid)); MyAccessDataSource.Update(); MyAccessDataSource.get_UpdateParameters().Clear(); } } } //UpdateRecords </SCRIPT>
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
Parameter コンストラクタ (String, TypeCode)
アセンブリ: System.Web (system.web.dll 内)
Parameter(String,TypeCode) コンストラクタで作成された Parameter オブジェクトは、指定した name パラメータ、type パラメータ、および他のプロパティの既定値を使用して初期化されます。Direction プロパティは Input に初期化され、DefaultValue プロパティは null 参照 (Visual Basic では Nothing) に初期化されます。
Parameter クラスを拡張したクラスから Parameter(String,TypeCode) コンストラクタを呼び出して、インスタンスの Name プロパティと Type プロパティを初期化する方法を次のコード例に示します。このコード例は、Parameter クラスの概要で取り上げているコード例の一部分です。
' The StaticParameter(string, TypeCode, object) constructor ' initializes the DataValue property and calls the ' Parameter(string, TypeCode) constructor to initialize the Name and ' Type properties. Public Sub New(name As String, type As TypeCode, value As Object) MyBase.New(name, type) DataValue = value End Sub
// The StaticParameter(string, TypeCode, object) constructor // initializes the DataValue property and calls the // Parameter(string, TypeCode) constructor to initialize the Name and // Type properties. public StaticParameter(string name, TypeCode type, object value) : base(name, type) { DataValue = value; }
// The StaticParameter(string, TypeCode, object) constructor // initializes the DataValue property and calls the // Parameter(string, TypeCode) constructor to initialize the Name and // Type properties. public StaticParameter(String name, TypeCode type, Object value) { super(name, type); set_DataValue(value); } //StaticParameter
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
Parameter コンストラクタ
| 名前 | 説明 |
|---|---|
| Parameter () | Parameter クラスの新しい既定のインスタンスを初期化します。 |
| Parameter (Parameter) | 指定した元のインスタンスの値を使用して、Parameter クラスの新しいインスタンスを初期化します。 |
| Parameter (String) | 名前を指定して、Parameter クラスの新しいインスタンスを初期化します。 |
| Parameter (String, TypeCode) | 名前と型を指定して、Parameter クラスの新しいインスタンスを初期化します。 |
| Parameter (String, TypeCode, String) | DefaultValue プロパティに指定した名前、型、文字列を使用して、Parameter クラスの新しいインスタンスを初期化します。 |
Parameter コンストラクタ (String)
アセンブリ: System.Web (system.web.dll 内)
Parameter(String) コンストラクタで作成された Parameter オブジェクトは、指定した name と他のプロパティの既定値を使用して初期化されます。Type プロパティは TypeCode.Object に、Direction プロパティは Input に、DefaultValue プロパティは null 参照 (Visual Basic では Nothing) にそれぞれ初期化されます。
Parameter クラスを拡張したクラスから Parameter(String) コンストラクタを呼び出して、インスタンスの Name プロパティを初期化する方法を次のコード例に示します。このコード例は Parameter クラスの概要で取り上げているコード例の一部分です。
' The StaticParameter(string, object) constructor ' initializes the DataValue property and calls the ' Parameter(string) constructor to initialize the Name property. Public Sub New(name As String, value As Object) MyBase.New(name) DataValue = value End Sub
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
Parameter プロパティ
| 名前 | 説明 | |
|---|---|---|
| | ConvertEmptyStringToNull | Parameter オブジェクトのバインド先の値が String.Empty の場合に、その値を null 参照 (Visual Basic では Nothing) に変換する必要があるかどうかを示す値を取得または設定します。 |
| | DefaultValue | パラメータの既定値を指定します。Evaluate メソッドの呼び出し時に、パラメータはこの値にバインドされ、初期化前の状態に戻されます。 |
| | Direction | Parameter オブジェクトを使用して値をコントロールにバインドするかどうか、またはそのコントロールを使用して値を変更できるかどうかを示します。 |
| | Name | パラメータの名前を取得または設定します。 |
| | Size | パラメータのサイズを取得または設定します。 |
| | Type | パラメータの型を取得または設定します。 |
| 名前 | 説明 | |
|---|---|---|
| | IsTrackingViewState | Parameter オブジェクトがビューステートへの変更を保存しているかどうかを示す値を取得します。 |
| | ViewState | 同一のページに対する複数の要求にわたって、Parameter オブジェクトのビューステートを保存し、復元できるようにする状態情報のディクショナリを取得します。 |
| 名前 | 説明 | |
|---|---|---|
| | System.Web.UI.IStateManager.IsTrackingViewState | Parameter オブジェクトがビューステートへの変更を保存しているかどうかを示す値を取得します。 |
関連項目
Parameter クラスSystem.Web.UI.WebControls 名前空間
ControlParameter クラス
CookieParameter クラス
FormParameter クラス
QueryStringParameter
SessionParameter
ParameterCollection
DataSourceControl
その他の技術情報
データ ソース コントロールとパラメータの使用Parameter メソッド
| 名前 | 説明 | |
|---|---|---|
| | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
| | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
| | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
| | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
| | ToString | オーバーライドされます。 このインスタンスの値を、それと等価の文字列形式に変換します。 |
| 名前 | 説明 | |
|---|---|---|
| | Clone | 現在の Parameter インスタンスの複製を返します。 |
| | Evaluate | Parameter オブジェクトの値を更新して返します。 |
| | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
| | LoadViewState | データ ソース ビューの、以前保存したビューステートを復元します。 |
| | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |
| | OnParameterChanged | Parameter オブジェクトを格納する ParameterCollection コレクションの OnParametersChanged メソッドを呼び出します。 |
| | SaveViewState | ページがサーバーにポストバックされた時間以降に発生した、Parameter オブジェクトのビューステートへの変更を保存します。 |
| | SetDirty | Parameter オブジェクトの状態がビューステートで記録されるように、このオブジェクトをマークします。 |
| | TrackViewState | Parameter オブジェクトがビューステートの変更を追跡するようにします。それにより、変更をコントロールの ViewState オブジェクトに格納して、同じページに対する複数の要求にわたって永続化できます。 |
| 名前 | 説明 | |
|---|---|---|
| | System.ICloneable.Clone | 現在の Parameter インスタンスの複製を返します。 |
| | System.Web.UI.IStateManager.LoadViewState | データ ソース ビューの、以前保存したビューステートを復元します。 |
| | System.Web.UI.IStateManager.SaveViewState | ページがサーバーにポストバックされた時間以降に発生した、Parameter オブジェクトのビューステートへの変更を保存します。 |
| | System.Web.UI.IStateManager.TrackViewState | Parameter オブジェクトがそのビューステートの変更を追跡するようにします。それにより、変更をコントロールの ViewState オブジェクトに格納して、同じページに対する複数の要求にわたって永続化できます。 |
関連項目
Parameter クラスSystem.Web.UI.WebControls 名前空間
ControlParameter クラス
CookieParameter クラス
FormParameter クラス
QueryStringParameter
SessionParameter
ParameterCollection
DataSourceControl
その他の技術情報
データ ソース コントロールとパラメータの使用Parameter メンバ
アプリケーション変数、ユーザー ID とユーザー選択、および他のデータにバインドするためにデータ ソース コントロールで使用する機構を提供します。ASP.NET のすべてのパラメータ型の基本クラスとして機能します。
Parameter データ型で公開されるメンバを以下の表に示します。
| 名前 | 説明 | |
|---|---|---|
| | ConvertEmptyStringToNull | Parameter オブジェクトのバインド先の値が String.Empty の場合に、その値を null 参照 (Visual Basic では Nothing) に変換する必要があるかどうかを示す値を取得または設定します。 |
| | DefaultValue | パラメータの既定値を指定します。Evaluate メソッドの呼び出し時に、パラメータはこの値にバインドされ、初期化前の状態に戻されます。 |
| | Direction | Parameter オブジェクトを使用して値をコントロールにバインドするかどうか、またはそのコントロールを使用して値を変更できるかどうかを示します。 |
| | Name | パラメータの名前を取得または設定します。 |
| | Size | パラメータのサイズを取得または設定します。 |
| | Type | パラメータの型を取得または設定します。 |
| 名前 | 説明 | |
|---|---|---|
| | IsTrackingViewState | Parameter オブジェクトがビューステートへの変更を保存しているかどうかを示す値を取得します。 |
| | ViewState | 同一のページに対する複数の要求にわたって、Parameter オブジェクトのビューステートを保存し、復元できるようにする状態情報のディクショナリを取得します。 |
| 名前 | 説明 | |
|---|---|---|
| | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
| | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
| | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
| | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
| | ToString | オーバーライドされます。 このインスタンスの値を、それと等価の文字列形式に変換します。 |
| 名前 | 説明 | |
|---|---|---|
| | Clone | 現在の Parameter インスタンスの複製を返します。 |
| | Evaluate | Parameter オブジェクトの値を更新して返します。 |
| | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
| | LoadViewState | データ ソース ビューの、以前保存したビューステートを復元します。 |
| | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |
| | OnParameterChanged | Parameter オブジェクトを格納する ParameterCollection コレクションの OnParametersChanged メソッドを呼び出します。 |
| | SaveViewState | ページがサーバーにポストバックされた時間以降に発生した、Parameter オブジェクトのビューステートへの変更を保存します。 |
| | SetDirty | Parameter オブジェクトの状態がビューステートで記録されるように、このオブジェクトをマークします。 |
| | TrackViewState | Parameter オブジェクトがビューステートの変更を追跡するようにします。それにより、変更をコントロールの ViewState オブジェクトに格納して、同じページに対する複数の要求にわたって永続化できます。 |
| 名前 | 説明 | |
|---|---|---|
| | System.ICloneable.Clone | 現在の Parameter インスタンスの複製を返します。 |
| | System.Web.UI.IStateManager.LoadViewState | データ ソース ビューの、以前保存したビューステートを復元します。 |
| | System.Web.UI.IStateManager.SaveViewState | ページがサーバーにポストバックされた時間以降に発生した、Parameter オブジェクトのビューステートへの変更を保存します。 |
| | System.Web.UI.IStateManager.TrackViewState | Parameter オブジェクトがそのビューステートの変更を追跡するようにします。それにより、変更をコントロールの ViewState オブジェクトに格納して、同じページに対する複数の要求にわたって永続化できます。 |
| | System.Web.UI.IStateManager.IsTrackingViewState | Parameter オブジェクトがビューステートへの変更を保存しているかどうかを示す値を取得します。 |
関連項目
Parameter クラスSystem.Web.UI.WebControls 名前空間
ControlParameter クラス
CookieParameter クラス
FormParameter クラス
QueryStringParameter
SessionParameter
ParameterCollection
DataSourceControl
その他の技術情報
データ ソース コントロールとパラメータの使用引数
(parameter から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2026/02/04 06:49 UTC 版)
|
|
この記事には複数の問題があります。
|
引数(ひきすう、英: parameter, argument)は、数学における関数やコンピュータプログラムにおける手続きにおいて、その外部と値をやりとりするための特別な変数、あるいはその変数の値のことである。
数学や最適化問題に関するそれ(「パラメータ」とカタカナで表現されることが多い)については「媒介変数」の記事を参照のこと。以下は専らコンピュータプログラミングに関して説明する。
関数・サブルーチン・メソッド等を定義する時に、外部から値を渡される特別な変数として指定されるのが仮引数。関数(等)を呼出す式において、仮引数に対応する式(あるいはその値)が実引数である。実行時には、実引数の値を仮引数が受け取る。
「引数」を「いんすう」と読む読み方もある[1][2]が、術語としては変則的に湯桶読みして「ひきすう」としている。数学分野で因数(factor)との取違えを防ぐためといった理由もある。
仮引数
仮引数(かりひきすう、かびきすう、parameter、formal parameter (formal argument))とは、手続き(プロシージャー)で定義される変数のうち、実行時に呼び出し元から渡される(実引数の)値を受けるものをいう。例としてC言語系言語における定義を挙げる:
int sum(int addend1, int addend2)
{
return addend1 + addend2;
}
上の定義では、
int型の仮引数addend1int型の仮引数addend2
2つを伴った関数 sum を定義している。定義の中で addend1 と addend2 が変数のように使用されていることに注目されたい。
実引数
実引数(じつひきすう、argument、actual argument (actual parameter))とは、プロシージャーを呼び出す際に渡す値のことで、プロシージャーの挙動(動作や結果)に作用する。変数やリテラルを含む式を指定できる。C言語系言語において前に示した例中の関数 sum を用いた例を挙げる:
sum(123, 456);
上の文は、
- 仮引数
addend1に対応する実引数 123 - 仮引数
addend2に対応する実引数 456
2つを関数 sum に渡している[3]。
評価戦略
値渡し
値渡し(あたいわたし、call by value)は右辺値を渡す方法で、実引数として変数を渡したとしても、その値のみが渡される。もちろん即値や複雑な式を渡すこともでき、式の評価結果が渡される。その仕組みとしては、独立した新たな変数が関数内に用意され、元の値がコピーされる。そのため変数を渡したとしても、元の変数が変更されるという事はない。
これは「関数が副作用を持たない」という観点から、計算を中心とする言語では望ましい動作といえる。またそもそも代入概念のない関数型言語では、引数は必ず値で渡されると考えられる(ただし、代入が存在しない以上コピーをとる必要もない)。
値渡しを採用した言語としてはC言語、ML、APL、Scheme、Java等が挙げられる。
ポインタ渡し
アドレス渡し(call-by-adress)とも呼ぶ。 C言語やC++のポインタが保持する値はオブジェクトに対する参照(メモリアドレス)であり、後述の参照渡しの参照と似た性質を持つ。このため、ポインタ変数を値渡しすると、値渡しでありながら参照渡しと似たような効果を得ることができる。このため、ポインタ(=メモリアドレス)を値渡しする事を単なる値渡しと区別して俗にポインタ渡しなどと呼ぶ事もある。
名前渡し
ALGOLで採用されていた特徴的な機能の一つである。名前渡しでは値でも参照でもなく、式がそのまま渡される。基本的には参照渡しのように振る舞うが、式を参照するごとに値を計算して取り出す事が特徴である。C言語のプリプロセッサのマクロ展開と似ているが、引数と、ローカル変数が衝突しないように配慮はされる。 次のような例は名前渡しに特徴的な動作と言われる。
swap(x,y) {
tmp = x;
x = y;
y = tmp;
}
この例に対し、x=i, y=a[i]という"式"を渡すとする。仮にi=2だったとすると、
-
tmp = x; -
xはiを渡されており、かつi=2と仮定したので、x=i=2となり、tmpは2になる。 -
x = y; -
xはiを渡されているのでiがyの値になる。yはa[i]を渡されており、かつi=2と仮定したので、iはaの2番目の値になる。 -
y = tmp; -
yはa[i]を渡されているが、前手順によりiはa[2]になっている。従ってy=a[a[2]]となる。最初の手順によりtmpは2なので、a[a[2]]の値が2になる。
結果として、「iとa[i]の変数値を交換する」という期待に反し、予想もしない意外な挙動を示すこととなる。
このような複雑さもあって、ALGOL以外で名前渡しが採用された事例はほとんどない[4]。
変数渡し
変数渡し(へんすうわたし、call by variable)は、変数そのもの(左辺値)を渡す方法で、この場合は仮引数に対する操作がそのまま実引数(渡された変数)に影響する。 多くの言語では(とくに配列のようなデータ構造を戻り値にできない場合)戻り値はひとつの値だけしか返せないが、データベース検索などで見つかったかどうかと、見つかったならその値も知らせるような場合に、見つかったかどうかを戻り値にして、検索結果の値は適当な引数を変更するといった使い方ができる。
参照渡し(さんしょうわたし、call by reference)はその実装手段の一つ(と見ることもできる[5])。変数に対する参照(アドレス情報)を渡す方法である(これは言語側が勝手に行う。C言語のように明示的にアドレス演算子を使うものは参照渡しとは呼ばない)。
その他、値渡しと同じようにコピーを渡しておいて、関数/サブルーチンからのリターン時に元の変数に変更結果をコピーしなおす方法もある(これは変数の共有(エイリアス)や再帰呼出しがあると奇妙な結果になることがある)。PL/Iでは、どちらの方法で実装しても良いと規定されている。
原始的な言語であるFORTRANは機械語のアドレス操作を反映した参照渡ししか持たなかった。これは特にcall by indexと呼ばれている。
他に変数渡しをサポートする言語としては、Pascal、Perl、C++、C#、Quick BASIC等の構造化BASICなどが挙げられる。
なお変数渡しの関数・サブルーチンに、実引数として変数以外(右辺値)を渡した場合にどうなるかは、言語によって異なる。そのような操作が禁止されており、エラーが発生する言語(Pascal等)、テンポラリな変数を作成し、リターン時にそれを捨ててしまうため、値渡しと同じことができる言語(Quick BASIC等)、「未定義の動作」をひきおこし、何が起こるか全く予測がつかない言語(FORTRAN等)がある。C++ではconst修飾されていない型への参照に右辺値を渡すとエラーになるが、const修飾されていれば一時オブジェクトが作成され、また右辺値のみを参照できる「右辺値参照」が存在する。
値渡しによる引数の変更
C言語は値渡しのみをサポートするが、変数のポインタ(メモリアドレス)を取得することが可能であるため、変数へのポインタを値で渡す事で元の変数を変更できる。オフセット計算により配列や構造体の一部分を参照するコードも容易に記述できる。
しかしこれは、実際の変数領域を逸脱した部分をも参照できるので、あくまでも値渡しによる参照渡しのエミュレートである。参照渡しをサポートする言語でも内部的には同様の操作を行っているが、それは何らかの意味で言語の保護下にある参照となる。
参照の値渡し
参照渡しで言うところの「参照」と呼ばれているものと、特定の言語で「参照」と呼ばれているものが必ずしも同じでない事には注意が必要。例えば、Javaは参照型を扱うための『Javaの「参照」』を持つが、これはPascal等のポインタ相当で、『参照渡しの「参照」』とは概念が違うため、『Javaの「参照」』を渡しても参照渡しであるとは言えない。C言語の「ポインタの値渡し」と同じである[6] 。これは、Javaの参照型と似た参照型と、Javaのプリミティブ型に近い値型を持つC#を見ると理解しやすいだろう。C#では、特に指定しなければ参照型も値型も値渡しされるが、引数に ref もしくは out を使用する事によって参照渡しにする事ができる。『C#の値型』を渡すから値渡し、『C#の参照型』を渡すから参照渡しとはならない。
例:Pascalの変数渡し
Pascalの手続き(procedure)や関数(function)では、原始型(integer, realなど) の値渡しと変数渡しのどちらでも行える。変数渡しの場合は手続き・関数の引数にvarを付ける。
{ 手続き swap 内で a,b の値を入れ替える。
sampleの i,j は変数渡しされ、aとi、bとjは同じアドレスを指して
いるので、i,jの値は入れ替わる。 }
procedure swap(var a,b:integer); { var をつけると変数渡し }
var tmp:integer;
begin
tmp := a; a := b; b := tmp
end;
procedure sample();
var i, j:integer;
begin
i := 5;
j := 10;
swap(i, j);
... { iは10, jは5になる }
end;
遅延評価
Haskellなどの遅延評価型関数言語に見られる形態で、値が実際に必要になるまで計算を行わない方法。概念上は、計算方法を遅延したthunkと呼ばれるオブジェクトが渡っていると考えられる。
脚注
- ^ KAKASI (Kanji Kana Simple inversion program) MIT
- ^ Javascript練習 09 京都産業大学
- ^ ちなみに、上の文の結果は 579 である
- ^ とはいえ中島秀之によれば、DEC 10 Prologの移植に際して、「修羅場を見た」と述べている。
- ^ 変数以外から成る任意の式に対して、その左辺値というものは考えづらいため。あたかも名前のない変数がテンポラリに作られるかのように振舞うものもある。
- ^ JavaHouse-Brewers の議論
関連項目
- parameterのページへのリンク