質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

6回答

690閲覧

自作したクラスの管理方法に関する質問

hsato8

総合スコア13

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

4グッド

2クリップ

投稿2018/02/02 13:57

C++やPythonなどで、自分が使いやすいようにクラス化しているのですが、
時間がたつと、どんなものを作ったのか忘れてしまい、車輪の再発明をしてしまいます。

皆さまは、自作したクラスや関数などをどのように管理されているでしょうか?
漠然とした質問で大変申し訳ありませんが、ご助言いただけると幸いです。
よろしくお願いいたします。

avalon_reimu, SatoshiMashino, stringA👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

ベストアンサー

基本的なアルゴリズムであれば、よいライブラリがあるので、それを使います。
よいライブラリがない言語は使わないことにしています。

そうでないものについては、うまいベストプラクティスがないケースなので、
その都度書き直してたりします。

数ヶ月後にコードを忘れていることもありますが、
別のよい書き方を思いついていたりするので、
書き直したほうがより簡潔で速度も早いコードになってたりします。
そして数カ月後に更に…

最近だと数カ月後にライブラリのバージョンアップに伴って互換性もなくなるので…


あまりクラスをカスタマイズしない方がよい気がします。
特定の問題が簡単に扱えるようにカスタマイズするとその分汎用性は落ちますので。

ライブラリの実装がどうしても気に入らなく、より優れた実装があると信じているのなら、
オープンソースの場合直接コミュニティに参加してコミットするとよいと思われます。


大規模なプログラムを設計する際はもっとがんばりますが、
全体の設計は固定しても、個々の実装は変更が容易なはずです。
というよりそのようにがんばって設計します。

投稿2018/02/02 14:49

編集2018/02/02 14:50
mkgrei

総合スコア8562

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hsato8

2018/02/04 14:11

回答ありがとうございます。 ライブラリにすでに実装されているものも、自分で書いてしまうことが多いので、なるべく標準ライブラリを使ってみようかと思います。 追加の質問で大変恐縮ですが、標準ライブラリを組み合わせて、あるプロジェクトや案件用のクラスを作って、別案件で流用する等はあまりされないのでしょうか?
mkgrei

2018/02/05 01:23

https://reactjs.org https://angular.io https://www.tensorflow.org などはうまくライブラリができていますよね。 ライブラリとしてまとめることができれば流用することも可能かもしれませんが、コードぽんは難しいでしょうね。 個人であればファイルを取ってきて加工してcsvファイルに書き出すためのスニペットを使いまわせたりするのですが。 コードを部分的に再利用するのは難しい気がしますね。 ファイルの入出力にフォーマットを決めるとちょっとは使いまわせますが、コードというより処理の使い回しですね。 結局手を加えるとなると書き直した方が早く済むというのが実状な気がします。 そうでなくとも、リファクタリングは同じ案件でコードを書き直しますからね。 すごくうまく設計しないとプロジェクトを超えて利用するのは難しい気がします。
hsato8

2018/02/06 12:01

なるほど。リファクタリングを繰り返し、洗練されていくものなんですね。 また、ライブラリを教えていただきありがとうございました。
guest

0

こんにちは。

時間がたつと、どんなものを作ったのか忘れてしまい、車輪の再発明をしてしまいます。

同じものを再度作ること結構ありそうです。ですが、そもそも同じものを作ったのかどうかよく分からんです。以前に作ったことを綺麗に忘れてますから。

結局、覚えているものだけを使いまわしてます。忘れたらそれで終わりです。リストを作るなどしての管理はしていません。プロジェクト単位ではソースが事実上の管理リストになりますが、全く無関係なプロジェクト間で共有するためのリストは作っていないという意味です。

プログラミング言語も進歩してますし、自分自身も進歩してますから、昔作ったプログラムをそのまま使いまわすケースって結構少ないですし。

投稿2018/02/02 16:11

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hsato8

2018/02/04 14:09

ご回答ありがとうございます。やはりそのまま以前のコードを流用するというのは難しいのですね。。。 Chironianさんは、コメントの書き方に何か工夫をされているのでしょうか?
Chironian

2018/02/04 14:30

論理的な区切りがパッとみて判りやすいようなコメントを付けます。なるべく大きな単位でソースを把握しやすい姿にしたいからです。 後は、デバッグで嵌りそうなことや嵌ったことはコメントしてます。
hsato8

2018/02/06 11:59

ご回答ありがとうございます。コメントのつけ方、とても参考になりました。
hsato8

2018/02/06 12:03

ご回答ありがとうございます。自分のコードを見直してみると、コメントと論理的な区切りが疎結合になっていないことが多いので、注意してみようと思います。ご助言ありがとうございました。
guest

0

  • 少なくともdoxygen/JSDoc互換スタイルのコメントを付ける
  • コメントと合わせてみてぱっと何をしているかわからないような疎結合になっていないクラス/関数を作らない
  • 標準ライブラリの作法になるべく合わせる
  • 標準ライブラリの今後の動向を把握し、それに沿う関数/クラスを作る
  • そもそも自分で書かない、すでにあるライブラリを使う
  • テストを書く

追記

  • 標準ライブラリのクラス/関数群をよく知る(普段使ってないもので有用なものはきっとたくさんある)
  • デファクトスタンダードとなっているライブラリがあればそれもよく知る(C++ならboostとかEigenとかとか)

友人曰く

  • githubなどに上げて公開する
  • ブログに紹介記事を書くようにする
  • パッケージ管理がある言語ならそれに公開する
  • サンプルを書く

さらに追記

gitでソースコードを管理してかつコミットは粒度を細かくしておいてかつコミットメッセージをWHYがわかるように書くと、git blameをみて「なんでこんな実装にしたんだっけ」というのがわかって良さそう。他人が書いたコードを見るときにもgit blameはそれなりに見ているのでコミットが適切にされていないとすごく困る。

投稿2018/02/02 14:15

編集2018/02/04 15:02
yumetodo

総合スコア5852

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hsato8

2018/02/02 14:53

ご助言ありがとうございます。 再度質問となり恐縮なのですが、 ”標準ライブラリの作法になるべく合わせる”というのは、 どのような意味でしょうか? 例えば、下記ページで紹介されているmapライブラリ等の(C++の標準ライブラリ?)の書き方を参考にするということでしょうか? <http://ppp-lab.sakura.ne.jp/ProgrammingPlacePlus/cpp/library/009.html>
yumetodo

2018/02/02 15:33

標準ライブラリの命名基準、関数/メソッド分け(結合性)を真似るというか設計を真似るというか、似たような操作は標準ライブラリと同じ方がいいよねというか
hsato8

2018/02/04 14:13

ご回答ありがとうございます。 なるほど。設計をまねるのは大事ですね。頑張ってまねてみようかと思います!。ご指摘いただいたおかげで標準ライブラリで実装されている機能について理解が浅いことがわかりました。勉強になりました。
guest

0

車輪を作り直すと、昔より完成度の高い車輪になりますよ。何度も作り直しましょう。もし車輪を何度も作り直すのは面倒臭い!というマインドだったら、エンジニアには向いていないかもしれません。

投稿2018/02/06 01:49

TomoakiNagahara

総合スコア108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1.名前をしっかりつける
2.フォルダの階層、フォルダ名も含めてしっかり設計する

の2点を徹底すれば、似たようなものがないか探すときにどこを探せば良いか、なんという名前で検索すれば良いかわかるので、時間をかけてもしっかりやるのが良いと思います。

投稿2018/02/05 23:10

mtdsnsk

総合スコア789

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hsato8

2018/02/06 12:04

ご回答ありがとうございます。 フォルダ階層やフォルダ名も工夫してみようかと思います。
guest

0

機能の内容や目的等に関してはソースのコメントに書いてあると思いますので、新しくモジュールを作る際に記憶の片隅にひっかかったらgrepして似たような物がないか探すぐらいですね。
完全に忘れてたらそれまでです。

投稿2018/02/03 03:30

TaroToyotomi

総合スコア1449

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問