ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月28日(日) 05:17

全ての表示時間は UTC+09:00 です




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - Functionの戻り値の書き方
作成者 メッセージ
  記事の件名:   引用付きで返信する
わーいwww

まぁそれだけ書きたくて無駄にレスしてみましたすみません。
投稿記事 Posted: 2006年2月19日(日) 23:45
  記事の件名:   引用付きで返信する
引用:
まさかとは思いますがSub/function内に宛ててgosubを使うことは先ず無いと思うので、Sub/Function内においてreturn文を「gosubの折り返し地点」ではなくC等のように「返り値の設定及び抜ける位置」という解釈には出来ないものでしょうか。>>山本さん
た、たしかに(汗

関数内でGoSubを使うなどという荒業はあまりないですよね。Gotoは絶対に必要ですけど…。

ということは、関数内に限り、Returnステートメントを違う意味で持たせる、逆の視点から言うと、グローバル領域に限り、GoSubステートメントとReturnステートメントを組み合わせるという仕組みにはできそうですね。

Ver5.0ではReturnを廃止し、新しい意味を持たせたいとも思っていたので、このまとめ方で良さそうかも!?候補として検討してみます。
投稿記事 Posted: 2006年2月16日(木) 01:28
  記事の件名:  むしろ・・・  引用付きで返信する
まさかとは思いますがSub/function内に宛ててgosubを使うことは先ず無いと思うので、Sub/Function内においてreturn文を「gosubの折り返し地点」ではなくC等のように「返り値の設定及び抜ける位置」という解釈には出来ないものでしょうか。>>山本さん
投稿記事 Posted: 2006年2月15日(水) 23:48
  記事の件名:   引用付きで返信する
SubとFunctionの区別を無くすことも賛成ですが,よい案が思い浮かびません。
しかしSub/Functionそのものをなくすのには反対です。
キーワード強調されるなどの点で,目印としてわかりやすいからです。

とりあえずはExit時にSub/Functionを書く必要がなくなるだけでだいぶ有り難いです。

> Exitだけの記述ならFALSEを返すようにしていただきたいです
これを実現するとしたら,もっと広く使えるようExitで値が指定されなかったときに
何を返すかを指定できるようにしてはどうでしょうか。
コード:
Function FindSpace(s As String) As Long = FALSE ' ここがみそ。
    ' 略
    Exit 'Exit FALSEと同じになるという具合。
End Function
投稿記事 Posted: 2006年2月14日(火) 18:41
  記事の件名:   引用付きで返信する
すみません。キャストのことを完全に忘れてました
投稿記事 Posted: 2006年2月14日(火) 01:35
  記事の件名:   引用付きで返信する
> そうなればいっそのこと関数名の前にある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はキャストにも使われるので。
投稿記事 Posted: 2006年2月13日(月) 15:43
  記事の件名:   引用付きで返信する
引用:
"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を返すようにしていただきたいです
投稿記事 Posted: 2006年2月13日(月) 11:04
  記事の件名:   引用付きで返信する
何気に私も同じ悩みを持っていました。

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
投稿記事 Posted: 2006年2月12日(日) 18:52
  記事の件名:  Re: Functionの戻り値の書き方  引用付きで返信する
前もそんな話題あったような気がしますね。

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)
投稿記事 Posted: 2006年2月11日(土) 19:53
  記事の件名:  Functionの戻り値の書き方  引用付きで返信する
Functionの使い方ですが説明書では
コード:
Function name ([arglist]) [As type]
[commands]
[name = expression]
[Exit Function]
[commands]
[name = expression]
End Function

name
プロシージャ名を指定します。

arglist
引数を指定します。カンマ(,)で区切り、複数指定することができます。(詳細...)

type
戻り値のデータ型を指定します。
となっていますが、
関数名を変更した時に戻り値のnameまで書き換えるのが面倒なので
Cのreturnみたいな関数名に関係ない命令を追加していただきたいです
投稿記事 Posted: 2006年2月11日(土) 12:32

全ての表示時間は UTC+09:00 です


ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean