今の言語仕様やライブラリはココが足りないんじゃ…、エディタや周辺ツールにこんな機能が必要なのでは…!?このような要望、具体的な提案などがありましたら、こちらのフォーラムをご活用ください。
sk
記事: 11 登録日時: 2005年9月29日(木) 14:45
お住まい: 兵庫県
連絡する:
#1
投稿記事
by sk » 2006年2月11日(土) 12:32
Functionの使い方ですが説明書では
コード: 全て選択
Function name ([arglist]) [As type]
[commands]
[name = expression]
[Exit Function]
[commands]
[name = expression]
End Function
name
プロシージャ名を指定します。
arglist
引数を指定します。カンマ(,)で区切り、複数指定することができます。(詳細...)
type
戻り値のデータ型を指定します。
となっていますが、
関数名を変更した時に戻り値の
name まで書き換えるのが面倒なので
Cの
return みたいな関数名に関係ない命令を追加していただきたいです
Sinryow
記事: 141 登録日時: 2005年5月31日(火) 09:34
お住まい: 北海道
連絡する:
#2
投稿記事
by Sinryow » 2006年2月11日(土) 19:53
前もそんな話題あったような気がしますね。
ReturnだとGosubの終了という意味になってしまうので,こんなのを考えてみました。
コード: 全て選択
Function FindSpace(s As String) As Long
Dim i As Long, v As Long
For i = 1 To Len(s)
If Mid$(s, i, 1) = " " Then
Exit Function(i)
End If
Next
End Function(0)
' ============================================================
' Sinryow Game Home Page -
http://www.sinryow.net/
' Sinryow ActiveBasic Center -
http://ab.sinryow.net/
' ============================================================
山本
Site Admin
記事: 535 登録日時: 2005年5月30日(月) 15:08
連絡する:
#3
投稿記事
by 山本 » 2006年2月12日(日) 18:52
何気に私も同じ悩みを持っていました。
SubとFunction、戻り値の ある/なし を変えるだけでも、数箇所の変更が必要になってしまいますよね。こういうところが冗長的なのがBasic言語だと言われるとそれまでなのですが…
この際なので、
"Exit Sub" や "Exit Function" などをやめて(というか、それに追加する形で)
Exit 0
とかできるようにしちゃうのはいかがでしょうか。ようは、下記のようなコードがまかり通るということになります。
コード: 全て選択
Function FindSpace(s As String) As Long
Dim i As Long, v As Long
For i = 1 To Len(s)
If Mid$(s, i, 1) = " " Then
Exit i
End If
Next
Exit 0
End Function
sk
記事: 11 登録日時: 2005年9月29日(木) 14:45
お住まい: 兵庫県
連絡する:
#4
投稿記事
by sk » 2006年2月13日(月) 11:04
"Exit Sub" や "Exit Function" などをやめて(というか、それに追加する形で)
Exit 0
とかできるようにしちゃうのはいかがでしょうか。ようは、下記のようなコードがまかり通るということになります。
そうなればいっそのこと関数名の前にあるSub Functionも無くして
コード: 全て選択
FindSpace(s As String) As Long
Dim i As Long, v As Long
For i = 1 To Len(s)
If Mid$(s, i, 1) = " " Then
Exit i
End If
Next
Exit 0
の様にしてしまうのはどうでしょうか?
戻り値の有無は関数名()
As 型 の有無で判断するとか
これはこれでBasicからスゴイ勢いでかけ離れていくという問題がありますが…
あと戻り値が偽の場合にいちいちExit 0と打つのも面倒なんで
Exitだけの記述ならFALSEを返すようにしていただきたいです
Sinryow
記事: 141 登録日時: 2005年5月31日(火) 09:34
お住まい: 北海道
連絡する:
#5
投稿記事
by Sinryow » 2006年2月13日(月) 15:43
> そうなればいっそのこと関数名の前にあるSub Functionも無くして
コード: 全て選択
FindSpace(s As String) As Long
Dim i As Long, v As Long
For i = 1 To Len(s)
If Mid$(s, i, 1) = " " Then
Exit i
End If
Next
Exit 0
> の様にしてしまうのはどうでしょうか?
> 戻り値の有無は関数名() As 型の有無で判断するとか
それは無理ですよ・・・Asはキャストにも使われるので。
' ============================================================
' Sinryow Game Home Page -
http://www.sinryow.net/
' Sinryow ActiveBasic Center -
http://ab.sinryow.net/
' ============================================================
sk
記事: 11 登録日時: 2005年9月29日(木) 14:45
お住まい: 兵庫県
連絡する:
#6
投稿記事
by sk » 2006年2月14日(火) 01:35
すみません。キャストのことを完全に忘れてました
イグトランス
記事: 899 登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:
#7
投稿記事
by イグトランス » 2006年2月14日(火) 18:41
SubとFunctionの区別を無くすことも賛成ですが,よい案が思い浮かびません。
しかしSub/Functionそのものをなくすのには反対です。
キーワード強調されるなどの点で,目印としてわかりやすいからです。
とりあえずはExit時にSub/Functionを書く必要がなくなるだけでだいぶ有り難いです。
> Exitだけの記述ならFALSEを返すようにしていただきたいです
これを実現するとしたら,もっと広く使えるようExitで値が指定されなかったときに
何を返すかを指定できるようにしてはどうでしょうか。
コード: 全て選択
Function FindSpace(s As String) As Long = FALSE ' ここがみそ。
' 略
Exit 'Exit FALSEと同じになるという具合。
End Function
konisi
記事: 893 登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:
#8
投稿記事
by konisi » 2006年2月15日(水) 23:48
まさかとは思いますがSub/function内に宛ててgosubを使うことは先ず無いと思うので、Sub/Function内においてreturn文を「gosubの折り返し地点」ではなくC等のように「返り値の設定及び抜ける位置」という解釈には出来ないものでしょうか。>>山本さん
山本
Site Admin
記事: 535 登録日時: 2005年5月30日(月) 15:08
連絡する:
#9
投稿記事
by 山本 » 2006年2月16日(木) 01:28
konisi さんが書きました: まさかとは思いますがSub/function内に宛ててgosubを使うことは先ず無いと思うので、Sub/Function内においてreturn文を「gosubの折り返し地点」ではなくC等のように「返り値の設定及び抜ける位置」という解釈には出来ないものでしょうか。>>山本さん
た、たしかに(汗
関数内でGoSubを使うなどという荒業はあまりないですよね。Gotoは絶対に必要ですけど…。
ということは、関数内に限り、Returnステートメントを違う意味で持たせる、逆の視点から言うと、グローバル領域に限り、GoSubステートメントとReturnステートメントを組み合わせるという仕組みにはできそうですね。
Ver5.0ではReturnを廃止し、新しい意味を持たせたいとも思っていたので、このまとめ方で良さそうかも!?候補として検討してみます。
konisi
記事: 893 登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:
#10
投稿記事
by konisi » 2006年2月19日(日) 23:45
わーいwww
まぁそれだけ書きたくて無駄にレスしてみましたすみません。