コーディングの話No.01837
山紫水明 さん 01/03/08 17:17
 
 かかしさん,こんにちは。秀丸会議室の続きです。

》私は、以下のような3パターンだったら@を選びます。
》1行でも、複数行でも中括弧をつけたい人です。

》@-----
》    while( result ){
》        findup;
》    }
》A-----
》    while( result )
》        findup;
》B-----
》    while( result )
》    {
》        findup;
》    }

 じつは私のはこのどれでもなく,もっと手を抜いた(^^)

    while( result ) findup;

というものでした。(#7858) -------- パターン4

それで,コメントをつけたければ,
    while( result ) findup;  //上方向の置換になる。
または,
    while( result ) findup;
        //上方向の置換になる。

で,差し支えないのではと。
 ただし,追加処理を書き加えるときには,おっしゃるように,はじめから,{}が
あった方がやりやすいことは確かですね。

       では, (^^)/~

[ ]
RE:01837 コーディングの話No.01838
かかし さん 01/03/08 18:33
 
かかしです、こんにちは。

投稿した後で会議室の違和感に気がつきました。
お気遣いありがとうございます>山紫水明さん

> じつは私のはこのどれでもなく,もっと手を抜いた(^^)
>
>    while( result ) findup;
>
>というものでした。(#7858) -------- パターン4

たとえば、
(飽くまでも例です。)

    while( result ) findup;message "置換しました。";

と書いたとき(書かないと思いますが)
一瞬、whileが効いているように錯覚しそうです。

>それで,コメントをつけたければ,
>    while( result ) findup;  //上方向の置換になる。
>または,
>    while( result ) findup;
>        //上方向の置換になる。
>
>で,差し支えないのではと。
> ただし,追加処理を書き加えるときには,おっしゃるように,はじめから,{}が
>あった方がやりやすいことは確かですね。

C言語の場合などは、デバッグもしやすいです。

@----
if(a[0] == 'a'){
    printf("%c",a[0]);
        a[0] == 'b';
    }
A---
if(a[0] == 'a')
    printf("%c",a[0]);
        a[0] == 'b';
----

明らかな処理に関しては1ラインでやるという選択肢もありますね。

if(fp == NULL)return(1);

とか・・・。

以上です。
---かかし

[ ]
RE:01837 コーディングの話No.01839
TAKA さん 01/03/08 18:34
 
TAKA です。

{}のことがよく分かると思いますので、質問以上の解説をします。


●文についての解説

文は、プログラム実行のための最小構成単位です。文は、逐次実行
され、実行されたことによりなんらかの効果を残します。

文には次のようなものがあります。
単純文   insertとか
空分    ;のみ
複合分   {}
選択文   if
反復分   while
ジャンプ分 goto continue break return

反復分であるwhile文は、whileの次の文をループさせます。
ここで重要になるのは、次の文ということです。
                      ^^^^^^

つまり、単純文とか、複合分とか。

山紫水明 さんの場合だと、単純分の利用になりますので、コーディ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ング上は何の問題もありません。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

単純分を複数(もちろん1つも含みます)書きたい場合は、複合分
を使用します。
複合分が1つの文になりますので、whileの後に複合分を書いた場
合は、その複合分(つまり、複合分の中全て)が実行されることに
なります。

先日のアンドゥのパック化の話もこの複合分と同じことですね。
#あっ、今回は関係ない話か。

1つの単純分で済む場合に、なぜ、複合分をわざわざ使うのかと言
いますと、あらかじめ、メンテをする可能性を考慮しているためで
す。
もし、単純分だけのコーディングの場合に単純分だけの追加をした
ら、その単純分は動きません。メンテする時に複合分にすることを
忘れたりしたら大変です。
最初から複合分にしておけば、何も考える必要がありません。

if( 判定 ) break;
のように、ジャンプ分の1文しか入る余地がないような場合は、そ
の時の気分で複合分を使ったり使わなかったりします。
今回の「findup」も1文しか入る余地がないとは思いますが、絶対
にないとは、いいきれませんでした。

マクロはフリーフォーマットなので、{}の位置は自由にかけますの
で、
    while( 1 ){
    }
と書いたり、
    while( 1 )
    {
    }
さまざまです。
前者を使用する人は、ステップ数を短くしたい場合などです。
後者は、{}の対応が分かりやすいように、カラム位置を合わせたい
場合などです。
どちらも正しいので、個人の好みになります。
#ヘルプは前者のようですね。


勝手に宿題を作ってみました。興味のある人は考えてみて下さい。
#一瞬、何故と思ってしまいます。

[宿題]以下のマクロは正常に動作しません。何故でしょう。
// 宿題マクロ(ここから)
    // 「a」を2回挿入する
    #I = 0;
    while( #I < 2 ){}
    {
        insert "a";
        #I = #I + 1;
    }
    endmacro;
// 宿題マクロ(ここまで)

[ヒント]whileは次の文をループさせるということと、フリーフォー
マットであるということ。
#C言語なら、「;」でも同じ現象を作れるんだけどなー
##マクロは、動いちゃうみたい。



今回、マクロの話が一杯出てきましたが、これらの発言により、マ
クロに興味を持ってプログラムする人が増えると良いですね。
秀丸を自分好みにカスタマイズして、秀丸の幅を広げて欲しいです。

[ ]
RE:01839 コーディングの話No.01840
きいろいまふらあ さん 01/03/08 20:30
 
> [宿題]以下のマクロは正常に動作しません。何故でしょう。

答え:仕様の記述内容が間違っているから。
解説:

>     // 「a」を2回挿入する

これ↑を
     // 無限ループする
と直せば正常に動作します。
#するよね?(^^;

> 秀丸を自分好みにカスタマイズして、秀丸の幅を広げて欲しいです。

FAQです。
起動時のウィンドウサイズは、動作環境→ウィンドウで指定できます。
ファイルタイプ別の設定→全般の「折返し文字数」も関係します。
一時的に広げるだけならウィンドウ右端をドラッグしましょう。
ただし設定によっては、折返し文字数を超えて広げられないこともあります。

いやあ、勉強にな……ばきっ。

ごめんなさい。

[ ]
RE:01840 コーディングの話No.01841
TAKA さん 01/03/08 20:47
 
TAKA です。

>> [宿題]以下のマクロは正常に動作しません。何故でしょう。
>
>答え:仕様の記述内容が間違っているから。
>解説:
>
>>     // 「a」を2回挿入する
>
>これ↑を
>     // 無限ループする
>と直せば正常に動作します。
>#するよね?(^^;

これも、答えの1つですね。


>> 秀丸を自分好みにカスタマイズして、秀丸の幅を広げて欲しいです。
>
>FAQです。
>起動時のウィンドウサイズは、動作環境→ウィンドウで指定できます。
>ファイルタイプ別の設定→全般の「折返し文字数」も関係します。
>一時的に広げるだけならウィンドウ右端をドラッグしましょう。
>ただし設定によっては、折返し文字数を超えて広げられないこともあります。

ごめんなさい。私が「幅」と書いたので、誤解を与えてしまったよ
うです。
秀丸の機能拡張と書けばよかったですね。

[ ]
RE:01839 コーディングの話No.01842
山紫水明 さん 01/03/08 21:34
 
 TAKAさん,こんばんは。

 どうも私はコーディングという言葉の意味を根本的に取り違えていたようです。

で,あらためてパソコン用語辞典を見たら,要するにプログラム言語を用いてプロ
グラムを記述することをコーディングというのですね。
 マクロが正しく動けば,それでコーディングはできたといえるわけですよね。
 したがって,たとえば,先のマクロでいえば,

gofileend;left;replaceup".\\f.","\\0@\\1",regular;while(result)findup;
endmacro;
(通信の途中で改行が入るかもしれませんが,スペースも改行もない1行の文です)

で,コーディング上は問題ないといえることになります。
 私は,わかりやすいように,修正もしやすいように,一定の様式に整形して仕上
げる事をコーディングだと思いこんでいました。
 たとえば,茶道では,ただお茶を飲めればいいということであれば,作法も礼儀
も必要ないでしょう。しかし,それぞれの茶道の流儀では正しいとされる作法があ
ります。
 で,私がこだわったのは秀丸の流儀にのっとった正しい書き方はどういうことか
ということでした。マクロが正しく動作するのは当然の前提として,それとは別の
次元のことだったのです。ある意味で本質的ではないことでした。
 どうも私がコーディングの意味を取り違えてしまったために,TAKA さんや,か
かしさんに余分なご迷惑をおかけしてしまったようです。<m(__)m>
 今日は恥の多い日でした。(^^)

宿題はなかなかおもしろい問題ですね。こういうのを無限ループというのでしょう
か。

》今回、マクロの話が一杯出てきましたが、これらの発言により、マ
》クロに興味を持ってプログラムする人が増えると良いですね。
》秀丸を自分好みにカスタマイズして、秀丸の幅を広げて欲しいです。

 本当に幅がひろがりますよね。

     では, (^^)/~
                                        山紫水明

[ ]
RE:01841 コーディングの話No.01843
杉浦 まさき さん 01/03/09 00:34
 
TAKA さん、まふさん、こんばんは。
お久しぶりの 杉浦 まさき です。

>>> [宿題]以下のマクロは正常に動作しません。何故でしょう。

…これを見て、僕のホームページの「お笑いマクロど〜じょ〜」を
思い出してしまいました(^^;。<連載「中」なのに「思い出す」なよ(^^;

>>> 秀丸を自分好みにカスタマイズして、秀丸の幅を広げて欲しいです。
>>FAQです。
>ごめんなさい。私が「幅」と書いたので、誤解を与えてしまったようです。

う〜ん、これは単に「幅」にかけたシャレだったのでは?
…って違ってたらどうしよう(^^;。


[ ]
RE:01841 コーディングの話No.01844
きいろいまふらあ さん 01/03/09 08:47
 
> ごめんなさい。私が「幅」と書いたので、誤解を与えてしまったよ
> うです。

ごめんなさい。私が誤解をしたと誤解を与えてしまったようです。

ただの冗談でした。<しかもあんまし面白くない。
身内のMLじゃあるまいし、不適切でしたね。
あのメールを書いた前後はちょっとテンションが高かったようで、
多方面にご迷惑をおかけしております。
今はかなりテンション低いです。(^^;

[ ]
RE:01842 コーディングの話No.01845
かかし さん 01/03/09 11:12
 
かかしです、こんにちは。

TAKAさん、山紫水明さんこんにちは。

> どうも私はコーディングという言葉の意味を根本的に取り違えていたようです。
>
>で,あらためてパソコン用語辞典を見たら,要するにプログラム言語を用いてプロ
>グラムを記述することをコーディングというのですね。

私も、混同して使っていましたm(_ _)m。

#まぎらわしいタイトルにしたのも私です、すいません。

「コーディング」と「コーディングスタイル」と使い分ければ
よかったのかな?と反省しております。

コーディング:プログラムを書くこと
コーディングスタイル:プログラムを書くときの書き方、書く流儀

となるのかな。
間違っていたら、訂正をお願いします。

> で,私がこだわったのは秀丸の流儀にのっとった正しい書き方はどういうことか
>ということでした。マクロが正しく動作するのは当然の前提として,それとは別の
>次元のことだったのです。ある意味で本質的ではないことでした。
> どうも私がコーディングの意味を取り違えてしまったために,TAKA さんや,か
>かしさんに余分なご迷惑をおかけしてしまったようです。<m(__)m>
> 今日は恥の多い日でした。(^^)

コーディングスタイルについては、マクロではありませんが、C言語のスタイルに関
して
いろいろと本が出ています。
インデントの付け方、中括弧の付け方、コメントの書き方、変数名の付け方など・・

こういう話題をこの会議室でやってもいいと思うので、それほど悲観するほどのこと
では
ないと思います>山紫水明さん

>宿題はなかなかおもしろい問題ですね。こういうのを無限ループというのでしょう
>か。

>// 宿題マクロ(ここから)
>    // 「a」を2回挿入する
>    #I = 0;
>    while( #I < 2 ){}
>    {
>        insert "a";
>        #I = #I + 1;
>    }
>    endmacro;
>// 宿題マクロ(ここまで)

昔、C言語で

for(i=0;i=10;i++);
    printf("a[%d]=%c\n",i,a[i]);

で、printfが10回繰り返されない現象に悩まされたことがありました。
C言語を覚えたてで、コンパイラが悪いんじゃないかと疑ったりしました。

---かかし

[ ]
RE:01843 コーディングの話No.01846
TAKA さん 01/03/09 12:56
 
ちーすっ、お久しぶりです。TAKA です。

>>>> [宿題]以下のマクロは正常に動作しません。何故でしょう。
>
>…これを見て、僕のホームページの「お笑いマクロど〜じょ〜」を
>思い出してしまいました(^^;。<連載「中」なのに「思い出す」なよ(^^;

連載「中」ですか。いいですね。
私は、ホームページは何も更新していません。
気分がのらないので、しばらく休業中です。

しばらく、顔を出していなかったのですが、FAQとかの方は何か
進展ありました。


>>>> 秀丸を自分好みにカスタマイズして、秀丸の幅を広げて欲しいです。
>>>FAQです。
>>ごめんなさい。私が「幅」と書いたので、誤解を与えてしまったようです。
>
>う〜ん、これは単に「幅」にかけたシャレだったのでは?

だったみたいですね。
こちらのフォーラムが、少し活用(発言数が増えた)されたという
ことで、良かったのかもしれませんね。

[ ]
RE:01845 コーディングの話No.01847
TAKA さん 01/03/09 13:12
 
>for(i=0;i=10;i++);
>    printf("a[%d]=%c\n",i,a[i]);
>
>で、printfが10回繰り返されない現象に悩まされたことがありました。

そうそう。
人から、「動かないんですけどー」と相談を受けて、まさか空文に
なっているとは思わないので、しばらくは「何故」と思ってしまう
ことがありました。
その時は、「;」を指差して「ここだよ」と言って立ち去りました
が。

マクロでは
    while( #I < 2 );
    {
        insert "a";
        #I = #I + 1;
    }
で、無限ループになりませんので、C言語と互換性がなかったみた
いですね。

[ ]
RE:01845 コーディングの話No.01848
山紫水明 さん 01/03/09 21:08
 
 かかしさん,こんばんは。

》コーディング:プログラムを書くこと
》コーディングスタイル:プログラムを書くときの書き方、書く流儀

 そうですね,こうすれば誤解はないでしょう。

》こういう話題をこの会議室でやってもいいと思うので、それほど悲観するほどの
》ことではないと思います>山紫水明さん

 やさしいお言葉,感激です(;´_`;)
 元々,軽い気持ちで書いたのが,用語法のまちがいでえらいことになってしまっ
て(^^)

》コーディングスタイルについては、マクロではありませんが、C言語のスタイル
》に関していろいろと本が出ています。

 Cはほんの少しかじっただけですのでよくは知りませんが,秀丸マクロのスタイ
ルももとはそこから来ているのでしょう。
 マクロのスタイルは個人的に使う場合は,すきなようにすればいいのでしょう
が,他人に見せるものとなると,やはり一定の規範みたいなものに従うべきでしょ
う。
 で,その秀丸の流儀の規範ということになると,結局,秀まるおさんのかかれた
マクロと,ヘルプの例文ということになるのでしょうね。
 秀まるおさんのマクロ,どこで手に入れたのか忘れましたが,94年のが数個あり
ます。
       では, (^^)/~
                                        山紫水明

[ ]
RE:01848 コーディングの話No.01850
番頭++ さん 01/03/09 21:41
 
なまえは忘れたけど C のプログラムを整形する、フリーのツール (DOS) があり
ました。そのオプションを、見たときに、感激、なんでもできる、覚えられない。
個人の趣味の「整形」ツールでした。

[ ]
RE:01850 コーディングの話No.01856
Arimac さん 01/03/10 02:04
 
私も作りました(^^;

本当はCコンパイラにする積りだった
プログラムが挫折したのでそれを改造しました(^^;

元がCコンパイラの成り損ないなので
ちゃんと構文解析してて
if (a != 0) {
    b = 1;
} else {
    b = 2;
}
とかは
if (a == 0) {
    b = 2;
} else {
    b = 1;
}
に変換したりしてたような気がします(^^;

[ ]
RE:01856 コーディングの話No.01857
番頭++ さん 01/03/10 08:19
 
Arimac さんは、仕事でのコードを書いてらっしゃるん、ですよね。やは
りコーディングの標準化 (あちきはこう呼びます) とかあるんでしょうね。

> if (a == 0) {
を、あちきは、次にように書きます。今は、そうです。
if( a == 0 ){
趣味、好みの問題ですよね。時が変われば、それも変わるかも。

マクロの先頭部のコメントも書き方も決めています。それをマクロで処理して、
とある資料へ加工するマクロももっています。趣味以外の何者でもないみたい。
少しでも速く実行を期待して、コメントとか、改行を取り除くマクロも、でもソ
ースの二重管理になる場合もあるので、ボツ。

話は変わりますが、ハンドルも同じですね。このサイトでは意味が無いのですが。
Windows の質問をできる掲示板では、
「番頭++ 」の ++ を半角で返事される、++ は省略されるとかで、
あいての、スキルを判断したりします。それなりにあたるもんです。

マニュアルを日本語化するときに、翻訳の業者と、英数字の「半角表記」の打ち
合わせがあります。あとは、半角全角の間の「半角の空白」とかです。99 % は
「秀丸」のマクロで処理できるかも、知れません。でも、例外もあります。

    $string1 = gettext(seltopx,seltopy,selendx,selendy);
    if( $string1 != "Arimac" ){   //  冗談ですよー。おこんないでねぇ。
        call pp_to_hankaku $string1;   //  通常の変換。
    } else {
        //  escape; //  例外かも ...
    }
return; // to ... どこ ???

[ ]
RE:01857 コーディングの話No.01858
Arimac さん 01/03/10 17:06
 
今仕事してるところはコーディングの標準化は余り強くないです(^^;
自由主義的雰囲気を大切にしたいようです(^^;

私のコーディングスタイルはその時、その時の情勢で変わっています(^^;

最初の頃は
#define then_ {
#define else_ } else {
#define endif_ }
  if (a == 0) then_
    b = 1;
   else_
    b = 2;
  endif_
というVB風(この頃VBは無かったけど(^^;)
インデントがスペースで必要最小限という・・・

その次は
  if ( a == 0 ) then_
    b = 1 ;
   else_
    b = 2 ;
  endif_
というやたらスペースだらけ
この頃使っていたエディターのWindexが単語の切れ目を
スペースしか認識しないのでこうなりました。
もっともこれは前述のコーディングスタイルコンバーター
で変換したのですが。

なぜ、コンバーターを作ることになったかというと
私のソフトの他の人が手を入れて、無茶苦茶なコーディング
スタイルにしてくれたからです(^^;

私のコーディングスタイルは合理性重視です(^^;
変数名のつけ方にしてもgrepした場合に容易に
グローバル変数、構造体のメンバー名、自動変数、仮引数、
構造体の変数名、構造体へのポインター名等
が区別できるようにするのが目標です。
(半端な標準仕様のお陰で完全には達成できない)
これは私のコーディングスタイルが、作りながら及び作った後
構造的に気に入らないと思ったらダイナミックに
作り直しをするので、機械的な作業で処理できない
と手間が掛かるからです(^^;
お陰で、普通のプログラマなら目を剥くような大幅な
仕様変更でも、そもそもダイナミックに作り直しできる
ように作ってあるので平気なわけです(^^;

[ ]
RE:01857 コーディングの話No.01859
山紫水明 さん 01/03/10 20:48
 
SUB:RE:コーディングの流儀
 番頭++さん,こんばんは。

》> if (a == 0) {
》を、あちきは、次にように書きます。今は、そうです。
》if( a == 0 ){

 私は,次のように書いていました。
if(a == 1){
それで,ヘルプを見たら,

if( result == yes ) {

という例文がありました。これを一応標準とすると,私のが一番標準に遠く,お二
人の中間が標準だということになりますか。

》趣味、好みの問題ですよね。時が変われば、それも変わるかも。

 もちろんそれは大前提ですよね。スタイルの問題にすぎませんからね。
でも,一応標準はこうだというものもあった方がいいだろう,というのが愚見で
す。

》「番頭++ 」の ++ を半角で返事される、++ は省略されるとかで、

 えっ? 半角ではないのですか?

》あいての、スキルを判断したりします。それなりにあたるもんです。

 私のは「スキあル」というか,スキだらけだからなー・・・
 よくあたるだろうな〜(^^)

     では, (^^)/~
                                        山紫水明

[ ]
RE:01850 コーディングの話No.01860
かかし さん 01/03/12 10:40
 
かかしです、こんにちは。

番頭++さん、こんにちは。

>なまえは忘れたけど C のプログラムを整形する、フリーのツール (DOS) があり
>ました。そのオプションを、見たときに、感激、なんでもできる、覚えられない。
>個人の趣味の「整形」ツールでした。

UNIXだったら、cbかな?

---かかし

[ ]
RE:01859 コーディングの話No.01861
かかし さん 01/03/12 10:51
 
かかしです、こんにちは。

Arimacさん、番頭++さん、山紫水明さんこんにちは。

#ところどころ引用しております。

[hidesoft.4:01848| RE 01845 コーディングの話]
> Cはほんの少しかじっただけですのでよくは知りませんが,秀丸マクロのスタイ
>ルももとはそこから来ているのでしょう。
> マクロのスタイルは個人的に使う場合は,すきなようにすればいいのでしょう
>が,他人に見せるものとなると,やはり一定の規範みたいなものに従うべきでしょ
>う。

山紫水明さんって、Cをばりばりやっている人かと思っておりました。
投稿されるマクロなどを見ると、非常に美しく書かれていたので・・・。

[hidesoft.4:01858| RE 01857 コーディングの話]
>私のコーディングスタイルは合理性重視です(^^;
>変数名のつけ方にしてもgrepした場合に容易に
>グローバル変数、構造体のメンバー名、自動変数、仮引数、
>構造体の変数名、構造体へのポインター名等
>が区別できるようにするのが目標です。
>(半端な標準仕様のお陰で完全には達成できない)

変数名、関数名の付け方は毎回苦労しております。
どこかに、変数名のスタイルを統一した規格(?)のようなものがあると
聞いたことがあるのですが、、、

ポインタだったら文字列の最後に "_p"をつける、とか
グローバル変数だったら、文字列の最初に"gl_"をつけるとか
もしよろしければ、Arimacさんの流儀を教えていただけませんか?

#ちょっと秀丸マクロから話題がそれてきてしまっていますが、許してください。

[hidesoft.4:01859| RE 01857 コーディングの話]
>》あいての、スキルを判断したりします。それなりにあたるもんです。
>
> 私のは「スキあル」というか,スキだらけだからなー・・・
> よくあたるだろうな〜(^^)

コメントの付け方から、カウンタの変数、#define値まで、スキルどころか
性格まで見えたりします。

私のソースなんて、マクロもCのソースも場当たり的に書いているので、
外に出すのが恥ずかしいです。

---かかし

[ ]
RE:01861 コーディングの話No.01862
Arimac さん 01/03/13 00:17
 
流儀というか(^^;、基本は、
グローバル変数は最初に"g_"を付ける。
自動変数、仮引数は最後に数字を付ける。
ポインターは最後(数字の前)に"_pt"を付ける。
(かかしさんと結構近い(^^;)
構造体のメンバー名は最初に"m_"を付ける事も(^^;ある。
変数名(アドレスの割り付けられる識別子)は英小文字で始める。
定数名(アドレスの割り付けられない識別子)は英大文字で始める。
構造体の変数名は構造体名を英小文字にしたもので統一。
構造体の自動変数の場合は最後に"_wk数字"。
他はハンガリアン記法に準拠(単に変数名を英小文字で始めるのに
都合が良いだけのような気もする。あと、同じ値の型違いを
同時に持つのに都合が良いか。)
それとglobalな宣言は
#define global
として
global struct LN_DATA *g_top_ln_pt1;
とかとしてたような・・・
(関数も)

でも、C++とかJAVAとかVBとかだとポインター参照を記述しなくても
構造体(クラス)のメンバーにアクセスできるので
あまりこういったコーディングスタイルは有効ではなくなって
来ているような気がします(^^;

[ ]