HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0221
copperTab、スペース、改行、変数その他。。。6解決


copper

リンク

2010/2/21(Sun) 00:17:20|NO.30770

なにかルールを決めてTab、スペース、改行、変数などを使っていると思います。

repeat 24 時=cnt repeat 60 分=cnt repeat 60 秒=cnt if 秒数=555 : mes ""+時+":"+分+":"+秒+"" if 秒=30 { if 分=25 { tmp=tmp+1 } } 秒数=秒数+1 loop loop loop mes 秒数
これはやっぱり見にくいでしょうか。皆様の書き方を教えてください。



この記事に返信する


レノス

リンク

2010/2/21(Sun) 01:47:52|NO.30771

私は、それが大規模になったら見にくいと感じてしまいます。
でもコードの (見にくい or 見やすい) は個人差がかなり大きい話題ですよ。

私が書くとしたら、こうですね:

totalTime = 0 // この時点で (totalTime == 0) なのを保障するため repeat 24 hour = cnt repeat 60 minute = cnt repeat 60 second = cnt if ( totalTime == 555 ) { mes strf("%d:%d:%d", hour, minute, second) } if ( minute == 25 && second == 30 ) { tmp ++ } totalTime ++ loop loop loop mes totalTime

あまり纏まった長い処理がないので、空行だらけに……。

= や + など、演算子は、両端に最低1つの半角スペースを入れます
( でも私の場合、引用符(" ')と + は例外的にくっつけて書く、という謎の習慣があったり )。

式の中では = ではなく == を使い、if の条件式は丸括弧 ( ) で括り、
他の言語 (C++系) と少しでも似せて、「見慣れた形」にしています (間違いを間違いに見えるようにするため)。
if で { } を使ったのも同じ理由で。
二重の if 文は、冗長だと思ったため && で1つに纏めました ( & ではなく )。

あと、積極的に ++ などの複合演算子を使って、入力量を減らしています。
変数名 (識別子) を入力するのは危険な作業なので (打ち間違えががが……)。

> 日本語
ime の開閉が大変だと思うのですが、実際はどうなんでしょうか?



木村

リンク

2010/2/21(Sun) 02:38:36|NO.30772

 狭い行数に纏まる事を好む私の場合はこんな感じです。恐ろしく見辛い……

repeat 24*60*60 時=cnt/3600 : 分=(cnt/60)\60 : 秒=cnt\60 if 秒数=555 : mes ""+時+":"+分+":"+秒+"" if 秒=30 : if 分=25 : tmp=tmp+1 秒数=秒数+1 loop mes 秒数
 後、モジュール空間上での命名規則としてグローバルな要素とエイリアスを日本語(例『
エイリアス』『秒数』)で、ローカル変数を固有名詞的(例『Local』『Minute』)に書いて
います。ローカル変数を引数に受け取れても、エイリアスは受け取れない関数(strmid、instr
等)もあるのでローカル変数とエイリアスの区別はきっちりしています。



リンク

2010/2/21(Sun) 08:39:51|NO.30773


repeat 24 時=cnt repeat 60 分=cnt repeat 60 秒=cnt if 秒数=555 : mes ""+時+":"+分+":"+秒+"" if 秒=30 : if 分=25 : tmp=tmp+1 秒数=秒数+1 ;コメント loop //repeat60秒 loop //repeat60分 loop //repeat24時 mes 秒数
私はこんな感じ。
空白は左端に1つずつTabいれて、それ以外は基本的になし。
改行で区切ってるのでスクロールが長くなりますが、自分的にはみやすい。
長くなった分どこのrepeatを閉じてるんだ?とかになるので//でコメントつけます。(ifとかも)
普通のコメントは;で。
ifはあまりにも見づらいか横スクロしないといけない長さならまとめます。
まとめないにしても左端に空白は増やさないなぁ。

余談ですが、

;----------時 mes 時 ;----------分 mes 分 mes 秒
って感じだと真ん中(mes 時の次行)は絶対Tabいれません。
でもmes 分の次行はTabいれる。
見た目には違いないんですけど個人的な空白のこだわり。



GENKI

リンク

2010/2/21(Sun) 15:02:17|NO.30778

インデントの使い方はcopperさんと同じです。
行数が多い場合、まれにloopや}の後ろにコメントで何のインデントか説明を入れることがあります。

インデントだけでは後から見てスクリプトの意味がすぐにわからないので、repeatの前または後ろにコメントで、何の処理であるか説明を入れています。

ifの:と{}の使い分けは、if後の処理が短い場合や1行で終わる場合は、:で1行にまとめます。それ以外の場合は{}です。コメントを入れる都合で{}にしてしまうこともあります。

数式は基本的に変数と演算子の間は空白1つ以上入れます。例外として数式が複雑な場合は、逆に空白を入れなかったり、空白を2個以上入れることもたまにあります。

変数名やラベル名には、日本語は使用していません。理由はないんですけどね。最近は命名規則を決めてやるようにしているんですが、ルールが適当なのでいまひとつ安定してません。(^ ^;

> mes ""+時+":"+分+":"+秒+""

最後に「+""」をつける事はないですね。



秒数 = 0 ; 時 repeat 24 時 = cnt ; 分 repeat 60 分 = cnt ; 秒 repeat 60 秒 = cnt ;←特に問題がなければ変数に入れずにcntのままで使ってます。 ; (↓ここの処理の説明コメント) if 秒数 = 555 : mes "" + 時 + ":" + 分 + ":" + 秒 if (秒 = 30) & (分 = 25) : tmp++ 秒数++ loop loop loop ; 時 ←このぐらいの行数では、普段はこのコメントは入れません。 mes 秒数


結局は、自分で見やすい・間違えにくいと思う書き方ならそれでいいと思います。

> 他の言語 (C++系) と少しでも似せて、「見慣れた形」にしています (間違いを間違いに見えるようにするため)。

こういうことです。
1年前に自分が書いたスクリプトを読み直したりすると、どうすればいいか見えてくるかもしれません。



maa

リンク

2010/2/28(Sun) 13:24:21|NO.30886


;時間の単位変換を行う totalTime = 0 for hour,0,24 : for minute,0,60 : for second,0,60 if(totalTime == 555){ mes strf("%d:%d:%d", hour,minute, second) } if(minute==25 && second==30 ) : tmp++ totalTime++ next:next:next mes totalTime

私はこんな感じ。コメントは特に必要が無ければ処理のブロック毎に概略を書くくらいです。
面倒なので演算子前後のスペースなどはそれほど神経質に整えません。
その代わり変数や関数に分かり易い名前を付けたり、処理の手順を平易なものにするように心がけてます。

他言語のエディタには自動的にソースの整形をしてくれるものがあって便利です。
HSPにも同様の機能を追加できたらいいですね。



tsuka

リンク

2010/2/28(Sun) 18:36:34|NO.30888


repeat 24 時 = cnt repeat 60 分 = cnt repeat 60 秒 = cnt if (秒数 == 555) { mes strf("%d:%d:%d", 時, 分, 秒) } if (秒 == 30) { if (分 == 25) { tmp = tmp +1 } } 秒数 = 秒数 +1 loop loop loop mes 秒数
こんな感じですね。タブ文字は使わずに、半角スペース二つでインデントしています。
また、代入演算子の両側にスペース、その他の演算子は左側にスペースを入れます。
ifの評価式は括弧でくくり、論理演算子は代入演算子と区別するために、==や!=や&&や||など二つ重ねます。
それと、第二パラメータ以降のパラメータの前にはスペースを空けます。
あと文字列は+などしないでstrfを使いますね。

参考になりませんね。orz



ONION software Copyright 1997-2023(c) All rights reserved.