[ColdFusion] コンポーネント(2/4)

  • このエントリーをはてなブックマークに追加
  • 人気ブログランキング

例題

三角形、長方形、円があります。
1.それぞれの面積を求める関数を作りなさい
2.それぞれの周辺の長さを求める関数を作りなさい
3.それぞれの面積を合計した関数を作りなさい
4.それぞれの周辺の長さを合計した関数を作りなさい

 

今回はオブジェクト指向ではなく、
通常の考え方で作ってみます。

 

●面積を求める関数

●menseki.cfm

<cffunction name="calcMensekiSankaku" returnType="numeric" output="no">
     <cfargument name="teihen" type="numeric" required ="yes">
     <cfargument name="takasa" type="numeric" required ="yes">

     <cfreturn (arguments.teihen * arguments.takasa / 2) >
</cffunction>
<cffunction name="calcMensekiShikaku" returnType="numeric" output="no">
     <cfargument name="tate" type="numeric" required ="yes">
     <cfargument name="yoko" type="numeric" required ="yes">

     <cfreturn (arguments.tate * arguments.yoko) >
</cffunction>
<cffunction name="calcMensekiEn" returnType="numeric" output="no">
     <cfargument name="hankei" type="numeric" required ="yes">

     <cfreturn (arguments.hankei * arguments.hankei * 3.14) >
</cffunction>

 

●長さを求める関数

●nagasa.cfm

<cffunction name="calcNagasaSankaku" returnType="numeric" output="no">
     <cfargument name="hen1" type="numeric" required ="yes">
     <cfargument name="hen2" type="numeric" required ="yes">
     <cfargument name="hen3" type="numeric" required ="yes">

     <cfreturn (arguments.hen1 + arguments.hen2 + arguments.hen3) >
</cffunction>
<cffunction name="calcNagasaShikaku" returnType="numeric" output="no">
     <cfargument name="tate" type="numeric" required ="yes">
     <cfargument name="yoko" type="numeric" required ="yes">

     <cfreturn ((arguments.tate * 2) + (arguments.yoko * 2)) >
</cffunction>
<cffunction name="calcNagasaEn" returnType="numeric" output="no">
     <cfargument name="hankei" type="numeric" required ="yes">

     <cfreturn (2 * arguments.hankei * 3.14) >
</cffunction>

 

●実際の処理

●index.cfm

<cfinclude template="menseki.cfm">
<cfinclude template="nagasa.cfm">

<cfparam name="url.p" default="">

<cfoutput>
<cfif url.p eq "menseki">
menseki gokei = #calcMensekiGokei()#
</cfif>
<cfif url.p eq "nagasa">
nagasa gokei = #calcNagasaGokei()#
</cfif>

</cfoutput>
<cffunction name="calcMensekiGokei" returnType="numeric" output="no">
     <cfset var gokei = 0>
     <cfset gokei = gokei + calcMensekiSankaku(3,4) * 2>
     <cfset gokei = gokei + calcMensekiShikaku(5,6) * 3>
     <cfset gokei = gokei + calcMensekiEn(7) * 4>

     <cfreturn gokei>
</cffunction>
<cffunction name="calcNagasaGokei" returnType="numeric" output="no">
     <cfset var gokei = 0>
     <cfset gokei = gokei + calcNagasaSankaku(3,4,5) * 2>
     <cfset gokei = gokei + calcNagasaShikaku(5,6) * 3>
     <cfset gokei = gokei + calcNagasaEn(7) * 4>

     <cfreturn gokei>
</cffunction>

 

面積の計算を実行する場合は、
index.cfm?p=menseki

 

長さの計算を実行する場合は、
index.cfm?p=nagasa

 

関数名としては、
三角の面積を計算する場合、

calcMensekiSankaku

というようにしています。

 

今回注目する部分は、合計を計算している関数です。

 

合計を計算している部分で、
それぞれの関数を指定しています。

 

例えば修正として、五角形、六角形の面積と長さを求める場合は、
menseki.cfmに五角形、六角形の面積を求める関数を追加、
nagasa.cfmに五角形、六角形の長さを求める関数を追加、
面積、長さの合計を求める関数内に、
五角形、六角形のそれぞれの関数を追加することになります。

 

関数名も長いですね。

 

これがオブジェクト指向になるとどうなるか、
次回考えてみたいと思います。

  • このエントリーをはてなブックマークに追加
  • 人気ブログランキング

この記事に関連する記事一覧

最近の投稿
カテゴリー
タグ
アーカイブ
プロフィール