1 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 00:20:32 ] クラス名、変数名のつけ方に悩んだら書き込むスレです。 質問する人は、その変数に何を格納するのか(クラスだったらその役割) プログラミング言語は何なのかを、それぞれ書いて、 いい変数名を思いついた人は、それに答えてあげましょう。 命名規則や設計の善し悪しについて議論するのは基本的に禁止。 >>2 英和・和英・英英など各国語辞書と翻訳サイト。 >>3 類義語(シソーラス)辞書、図形・数式・数学用語の英単語。 >>4 関連スレと、いろいろな言語規約。 >>2-10 諸事情によりリンクがずれた場合。 前スレ。 ◆ネーミング倶楽部◆: pc3.2ch.net/tech/kako/1035/10353/1035362308.html Part1: pc5.2ch.net/tech/kako/1046/10465/1046541730.html Part2: pc5.2ch.net/tech/kako/1058/10582/1058213523.html Part3: pc5.2ch.net/test/read.cgi/tech/1067171530/ Part4: pc5.2ch.net/test/read.cgi/tech/1087209526/ Part5: pc8.2ch.net/test/read.cgi/tech/1109330204/ Part6: pc8.2ch.net/test/read.cgi/tech/1128266018/ Part7: pc8.2ch.net/test/read.cgi/tech/1144978008/ Part8: pc10.2ch.net/test/read.cgi/tech/1154448184/ Part9: pc11.2ch.net/test/read.cgi/tech/1168356029/ Part10: pc11.2ch.net/test/read.cgi/tech/1180146315/ Part11: pc11.2ch.net/test/read.cgi/tech/1191250784/ Part12: pc11.2ch.net/test/read.cgi/tech/1206118762/ Part13: pc11.2ch.net/test/read.cgi/tech/1222661623/
654 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 19:20:01 ] make sureということは存在するか否かを返すのではなく、 「存在すれば何もしない。しなければ作る」という処理なのかな。
655 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 20:36:38 ] >>654 「ディレクトリの存在を確認する」んだろ。 オレだったらconfirmにするが。
656 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 20:38:05 ] ensure
657 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 11:58:52 ] >>654 正解。すごいな、分かる奴には分かるもんなんだな。 msdn.microsoft.com/ja-jp/library/cc428990.aspx
658 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 12:06:17 ] 技術系の洋書に沢山出てくる言い回しじゃん。
659 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 12:10:37 ] make sure directory path exists establish directory path existence without doubt 処理の後に指定されたディレクトリが存在するという事後条件がある と解釈するのか、make sureに対してそういう見方をしたことはなかった これからはもっと英英辞典も使うとしよう
660 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 12:37:42 ] Let's make sure he's dead. のジョーク思い出した
661 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 12:40:21 ] こういう言い回しは、こんな感じの意味みたいな読み方しかしないから、 ちゃんとした解釈なんて考えた事もないわ。 だから技術系の本しか読めないんだなきっとw
662 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 14:32:53 ] >>660 死んでるかどうか確認して! と 確実に死んだ状態にして! の勘違いのアレか。
663 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 18:53:18 ] 処理内容と事後条件が混ざって嫌。 だいたい事後条件を満たせなかったら どうすんの?死ぬの? makeDirectoryIfNotExist とかのがよくね?
664 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 19:00:56 ] 満たせなかったら例外とかエラーだろ。
665 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 19:03:08 ] >>663 失敗したらどうすんの?死ぬの?w
666 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 19:26:44 ] >>665 お前みたいな頭の悪いガキが生まれても、 親は別に死んだりしない。
667 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 19:41:02 ] 名前変えても何も変わらなくね?って言ってるだけなんだけど。
668 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 23:58:38 ] この思い込み具合、またTONくさいな。。。。。
669 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 00:07:53 ] MakeSureDirectoryPathExists makeDirectoryIfNotExist 俺はどっちも同じ動作を思い浮かべるけどな
670 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 03:40:06 ] >>669 それほど変わらんかもしれんが、 >MakeSureDirectoryPathExists はsureに、 >makeDirectoryIfNotExist はmakeに主旨がある気がしない? 感覚的にはけっこう違うような。
671 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 04:50:04 ] TONさんがこんなボンクラセンスなわけねぇだろw
672 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 17:42:44 ] 2-3個くらいの文字列変数をルールに従って1つの文字列に合成・生成してOutputする関数を命名したいのですが composeかそれともgenerateどちらがいいでしょうか? 〜OutputStr()と言うような感じで考えています
673 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 18:48:31 ] 手段が重要ならcomposeあるいはsynthesize 目的が重要ならgenerate
674 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 09:07:58 ] 〜にcomposeやgenerateが入るのが、outputする関数の名前としては既におかしい。 OutputComposedStringとかならまだ分かるが。
675 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 09:47:23 ] IN: 引数 OUT: 戻り値
676 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 11:14:06 ] ルールとかOutputとかが何を意味するのかわかんないけど joinとかそういうのとは違うの?
677 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 11:20:23 ] やはりTONさんのネーミングセンスは一味違うな
678 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 16:31:55 ] やっぱTONさんパネェっす
679 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 17:05:20 ] 浮動小数点数が非数でも無限でもないことを判定する関数の 名前は何にしたらよいでしょう? IsRealNumber にしようとおもったら、実数は無限を含むらしいので。
680 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 17:12:17 ] IsFinite
681 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 17:18:54 ] 真偽を逆にしてIsNaNOrInfinite
682 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 19:39:53 ] >>679 正負の零、非正規化数、正規化数をあわせて、finiteとよぶ。
683 名前:676 mailto:sage [2009/04/23(木) 20:04:42 ] >>677 >>678 それもしかして俺に言ってるの? joinはセパレータ使って文字列結合するときには普通に使う関数名だよ? スクリプト言語とかboost.string_algoとか使ったことない? ちなみにセパレータじゃなくて意味のある文字列ならformatXXXのほうがいいかな composeとかのほうが意味がわからない
684 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 20:25:35 ] >>679 つ float.h
685 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 20:27:17 ] >>683 どうみても674あてだろがw
686 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 20:45:46 ] 疑心暗鬼に陥っているなw
687 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 04:35:34 ] >>683 このスレの住人のTON検出力を甘く見んなw
688 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 04:40:17 ] 683:(674に言ってるように見える・・・俺がTONなんだが・・・)
689 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 04:50:52 ] TONさんは頑なにTONが含まれるレスを無視するからアリエネ
690 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 06:31:07 ] ワロタ
691 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 07:25:31 ] 質問者はトンさんに絡まれたくない時は冒頭にTONって入れときゃいいのか
692 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 13:29:23 ] じゃあsageの代わりにTONって入れればいいんじゃね。
693 名前:デフォルトの名無しさん mailto:sage TON [2009/04/24(金) 18:26:36 ] まじぱねえっす
694 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 20:49:56 ] マイコンに接続されてるセンサー(今は温度センサーをつけてる)からデータを受けてviewクラスに値を渡したいのですが 項目名(温度センサーなら温度)とその値を持つ構造体の名前、どうしたらいいでしょうか 単純そうに思えてしっくり来る名前が思いつかないです
695 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 21:42:20 ] NameValuePair
696 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 22:43:49 ] SensorData
697 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 23:00:42 ] SensedData SensedValue
698 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 06:39:45 ] DetectedParameter
699 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 21:20:06 ] SensorEntry
700 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 14:17:29 ] 項目名と構造体名がお互いに愛し合っているなら、最も単純なものを。 そうではないが、刺激を与え合う関係であれば、中程度に複雑なものを。 誰もが気流に乗れていない状況であれば、いっその事名前をつけない。 客に媚びたいならば、可能であればジェネリクスを使う(同時に、客にはキッシュでも食わせておく)。
701 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 05:06:58 ] 書き込む前にもう一度だけ読み返してさえいれば、こんな事にはならなかったのにな
702 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 10:21:45 ] むちゃしやがって・・・
703 名前:ムモー [2009/05/10(日) 22:17:00 ] ClassName みたいな方法で名前を書くときって、 頭文字語を入れると読みにくくなるよね。 たとえば、「ABC法」という方法があって、 それをクラス化する場合、ABCMethod とすると読みにくくない? AbcMethod にすべき?それだと頭文字であることが分かりにくいよね。
704 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 22:25:02 ] キャメル法って言うんでしたっけか。 _使うっていう俺は素人
705 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 22:33:16 ] InitializeAclとか。
706 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 22:39:49 ] >>703 俺はマイクロソフトのガイドラインに則って2文字か3文字以上かで分けてる。 IOMode ioMode; XmlDocument xmlDocument;
707 名前:ムモー [2009/05/10(日) 22:50:28 ] >>706 うーん。でも、「AB法」とそれを拡張した「ABC法」というのがあって、 一方は ABMethod でもう一方は AbcMethod っていうのは、よくないかなーって。 実際、今の仕事でそういうのがあるんだけど。
708 名前:706 mailto:sage [2009/05/10(日) 22:54:43 ] >>707 それはさすがにきもいな。 どっちかにそろえるべきだと思う。
709 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 00:52:32 ] 可読性も重要だが、名前の衝突が深刻
710 名前:709 mailto:sage [2009/05/11(月) 01:07:27 ] いみふなので付けたし その言語の標準の命名規則に盲目的に従っておけば その言語仕様における名前の解決の方法・順番に纏わる トラブルに巻き込まれることが少なくなることを期待 なので、AbcMethodに一票 ABMethodは、作った人を殴りに行こう
711 名前:709 mailto:sage [2009/05/11(月) 01:10:21 ] よく読んでなかった。マイクロソフトな言語だったら殴んなくていいのね
712 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 02:01:23 ] Pythonならacronymのケースは全部大文字だな
713 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 03:51:13 ] 709が恥ずかしすぎる件について
714 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 19:11:41 ] JavaScriptでボタンのonclickにセットする関数として、 押される度にあるdivの表示非表示を切り替える関数は なんて命名したらいいですか? switch~~とかchange~~とか付けてたけど、ふと気になった。
715 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 19:20:21 ] Toggle***Visibilityとか
716 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 21:15:30 ] >>710 命名規則に従わないとコンパイル通らないプログラミング言語でもない限り、 トラブルに巻き込まれるわけがないだろ…… つかコーディング規約ってものは「周囲に合わせる」のが常識だろ? C++ Coding Standards の冒頭にも書いてるけど、 重要なのはルールに従うことじゃなく、一貫した書き方をしていること。 ABMethodがあるなら当然ABCMethodを期待するだろ。 名前の問題より、期待を裏切られるほうが深刻。 命名規則に盲目的に従うとかそれこそいみふだろ、常識的に考えて
717 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 21:37:42 ] 709はもんのっすっごい馬鹿なTONさんて感じだな
718 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:21:19 ] >>716 一貫した書き方をするために、盲目的にルールに従う必要があるの。 大体「周囲」って何なんだよ。 命名規約に従うとABMethod、AbcMethodという状況で、 ABCMethodなんて規約に反した命名するのは俺からしたら思いっきり 「期待を裏切る」行為だけどね。
719 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 23:02:40 ] 途中から関わる場合は周囲に合わせる。 最初から関わる場合は途中で変えない。
720 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 23:14:31 ] Java だと、名前が衝突したときに、obscure とか hiding とか shadow とか (あと一つあったような)いろいろ面倒な概念が必要になるんだわ。 マイクロソフトは知らね
721 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:37:29 ] 命名規約に従うなら、そもそも ABC なんて略語を使うのが規則違反なワケで AnyBasicChannel とかナントカ(意味フ)みたいに、略さなければいいこと。 そうすれば ABC なのか Abc なのかで悩む必要はない。 ところで便乗質問。 ラクダ法で名前を付けるとき、最初の1文字は小文字にすべし。たとえば inputOutputMethod みたいになるわけだが、頭にアンダースコアを付けると _InputOutputMethod でいいの?i は2文字目だから大文字でいいの?
722 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:52:28 ] C/C++ の標準規格に従うなら、そもそも _Input なんて頭にアンダースコアをつけるのが規則違反なワケで inputOutputMethod とかナントカ(意味フ)みたいに、つけなければいいこと。 そうすれば _input なのか _Input なのかで悩む必要は無い。
723 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 16:34:54 ] 知らないならレスしないでください
724 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:18:25 ] >>721 所詮コーディング規約なんだから、 規約を知らない人間が理不尽だと思うようなルールには従わんでいいだろ。 「ハイフンの次は先頭じゃないから大文字でいいよ!」なんて 馬鹿げた規約が仮にあったとしたら、その規約を10部くらい印刷して全部破り捨てるね。 あとラクダ法 = CamelCaseは厳密には先頭大文字。 先頭小文字は mixedCase。あえて区別しない時もあるけど。 つかコーディング規約にやたら拘る人多いけど釣りなの?
725 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:52:15 ] >>720 その概念は知らなかったが、 見る限り普通にコード書いてりゃわかりそうな概念だったぜ。 shadow: インスタンス変数とパラメータが被るときのルール hiding: 継承関係でstaticメソッドが被ったときのルール (多態が起こらない) obscure: パッケージ名、クラス名と変数名が被るときのルール ABCMethodをAbcMethodにしないと面倒という意味がわからないし、 そもそもこれが面倒になるようなコード書くなよとしか言えない。this.x = x;はよくやるが。 ついでにC++とかのADLとかtypedef typename とかと比べるとだいぶ簡単な気がするぞ。
726 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:55:36 ] >724 キャメルは先頭小文字で、先頭大文字はPascalだと思うが。
727 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:07:08 ] 途中の大文字をラクダのコブに見たててのcamel caseだから、先頭は小文字であれかし。
728 名前:726 mailto:sage [2009/05/12(火) 23:09:45 ] wikipediaによれば総称camel caseで先頭大文字のものをupper camel caseまたはpascal case、 先頭小文字のものをlower camel caseまたは単にcamel caseと呼ぶ、だそうな。
729 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 23:25:38 ] オレの亀は頭がデカい
730 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 07:25:44 ] 文中でも文頭でもcamelCase, PascalCaseとかけば誰も間違えないよ。
731 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 11:27:17 ] パスカルは天才だから頭がデカイ
732 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 12:13:15 ] 頭を上げた状態のラクダがいてもいいんではないだろうか
733 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 13:45:11 ] チェザーレにお世話になってるんですね、わかります。
734 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 00:36:23 ] これから作るクラス名、"RewindableIterator" と "MementoIterator" のどっちにしようか悩んでるんだけど 分かりやすいのはどっちだと思いますか?
735 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 00:50:19 ] 何作るのか知らんが 名前だけ見て動作が多少想像できるのは前者
736 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 01:02:36 ] MementoというとMementoパターンに関連したものをイメージするのだが、 IteratorがMementoパターンにどう関連するかわからない。
737 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 01:08:41 ] Mesomesoパターン
738 名前:736 mailto:sage [2009/05/14(木) 04:19:18 ] 名前だけでだいたい通じるかなーと思って敢えて詳細は書かなかったんだけど、 普通のイテレーターの機能に加えて、 ・saveState⇒現在のindexをスタックに追加(Push)する ・backState⇒スタックの先頭を取り出して(Pop)、現在のindexをそれに置き換える ていう機能がついてる感じです。 個人的にはやっぱ前者かなーと。セーブ地点に「戻せる」ようにすることが目的であって、 状態のスナップショットを記録するっていうのはちょっと違うかなぁと。
739 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 04:20:03 ] あ、734だったw
740 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 04:22:03 ] restoreState
741 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 04:31:08 ] rewindableって反復の途中で逆方向に巻き戻せるもののように聞こえる iteration ex) 0->1->2->3->4->5 rewindable iteration ex) 0->1->2->3->2->1->0
742 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 06:17:02 ] StickableIterator RestorableIterator
743 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 07:14:21 ] UnwindableIterator
744 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 08:57:12 ] >>741 つ bidirectional iterator
745 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 09:04:57 ] >>738 だったら、いっそ以下。 StackableIterator pushState() popState()
746 名前:デフォルトの名無しさん [2009/05/17(日) 14:12:52 ] ハンガリアンについての質問です。 int nIndex; のポインタ変数を、 int* lpnIndex; にしました。 この場合、int** のポインタ変数のプリフィックスは何にするのが一般的でしょうか。
747 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:33:20 ] 俺はハンガリアン使わないけど、なんでlp(= long pointer)なんだ Win32APIとあわせてるの?
748 名前:デフォルトの名無しさん [2009/05/17(日) 14:57:36 ] lplpn
749 名前:746 [2009/05/17(日) 15:29:51 ] >>747 16bit 時代からプログラミングしてると、どうしても p は 16bit、lp は 32bit って意識が強いから、 lp にしちゃうんだよね >>748 lplpn しかないか〜。thx!
750 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 15:45:01 ] システムハンガリアンなんか使うな
751 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 18:26:39 ] ハンガリアンについての質問だからいいだろ。
752 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:23:19 ] 8bit時代からプログラミングしてるが別にそんなこだわりない
753 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:58:08 ] __ , ‐' ´ ``‐、 / ̄:三} . /,. -─‐- 、. ヽ / ,.=j _,.:_'______ヽ、 .! ./ _,ノ `‐、{ へ '゙⌒ `!~ヽ. ! /{. / `! し゚ ( ゚j `v‐冫 , '::::::::ヽ、/ . {.l '⌒ ゙ 6',! / :::::::::::::::/ __ そんなことよりTimeOfNowの話しようぜ! . 〈 < ´ ̄,フ .ノー'_ , ‐'´::::::::::::::;/ (_ノ)‐-、 . ヽ.、 ` ‐", ‐´‐:ラ ':::::::::::::::: ;∠. ヽ_} ゙ヽ ,.r` "´ /:::::::::::::::::::ィ´ `ゝ !、 / / / :::::::::::::::: ; '´ /´\ / r'\ . i ! ::::::::::::::/ 墨 | .!::::::::/ヽ、.._!ヽ. ヽ、 { {:::::::::::;:イ / ‖i:::::::/:::::::::::::/ \ . ヽ ヽ,.ァ‐'´ /ヽ 二 ,/`ヽ、::::::::: / ヽ ヽ、 ,. ‐'" .ノ ,〈 > `'‐- ' > _,. ‐'´ / / `) ,ゝ _.⊥.-r┬:/ ヽ_,. -‐i"!´「L.=!┘ ヽ < / / | / 、i / __ ./
754 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 06:47:56 ] 通知機能(Yahoo!とかのアラート機能のようなもの)の通知条件を入れておく変数なのですが、 ・subscriptions とかでもおかしくないでしょうか? それとも ・notificationSettings みたいな感じのほうがよいでしょうか? アドバイスお願いします。