Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

auto キーワードを使って iterator 変数の宣言を簡潔にする #288

Merged
merged 2 commits into from
Jul 21, 2018
Merged

auto キーワードを使って iterator 変数の宣言を簡潔にする #288

merged 2 commits into from
Jul 21, 2018

Conversation

beru
Copy link
Contributor

@beru beru commented Jul 20, 2018

C++11 の auto キーワードを使用して変数の型宣言を省きました。
カウンタ変数のスコープを狭めたりもしています。

@m-tmatma
Copy link
Member

正規表現で iterator\s で検索したら例えば以下の箇所のようなコードが見つかった。

CMemoryIterator it = GetDocument()->m_cLayoutMgr.CreateCMemoryIterator(pcLayout);

これは iterator というキーワードは含むが、実際には CMemoryIterator という名前の
クラスなので変更対象から除外しているのですか?

@berryzplus
Copy link
Contributor

CMemoryIteratorはイテレータじゃないです。
単にクラスの命名が変わってるだけの、iteratorパターンとは無関係のクラスです。
少なくともこのPRのスコープではなさそう。

@berryzplus
Copy link
Contributor

berryzplus commented Jul 21, 2018

PRの趣旨は基本的に賛成です。
ただ、個別の変更については「好み」が多分に反映されてくるトピックなので、一括変換ネタではないのかな、と考えています。

たとえば・・・

for( CPlug::Array::iterator it = plugs.begin(); it != plugs.end(); ++it ){

for( CPlug::Array::iterator it = plugs.begin(); it != plugs.end(); ++it ){
	//インタフェースオブジェクト準備
	CWSHIfObj::List params;
	std::wstring curWord = pszCurWord;
	CComplementIfObj* objComp = new CComplementIfObj( curWord , this, nOption );
	objComp->AddRef();
	params.push_back( objComp );
	//プラグイン呼び出し
	(*it)->Invoke( pcEditView, params );

	objComp->Release();
}

ぼく基準で書き直すとこうなります。

for( auto it = plugs.begin(); it != plugs.end(); ++it ){
	//個々のプラグインを取得
	auto plug = *it;

	//インタフェースオブジェクト準備
	CWSHIfObj::List params;
	auto objComp = new CComplementIfObj( pszCurWord , this, nOption );
	objComp->AddRef();
	params.push_back( objComp );

	//プラグイン呼び出し
	plug->Invoke( pcEditView, params );

	objComp->Release();
}

この修正量を「 auto 対応」で直してしまってよいか疑問に思っています。
しかも、auto利用箇所一個増えとるしw

@beru
Copy link
Contributor Author

beru commented Jul 21, 2018

@m-tmatma

これは iterator というキーワードは含むが、実際には CMemoryIterator という名前の
クラスなので変更対象から除外しているのですか?

自分がこのPR用にコード変更してた際は、::iterator::const_iterator で検索して探してました。
auto 使える箇所は他にもいっぱいあると思いますが、まぁ…。

@beru
Copy link
Contributor Author

beru commented Jul 21, 2018

この修正量を「 auto 対応」で直してしまってよいか疑問に思っています。
しかも、auto利用箇所一個増えとるしw

自分的にはどちらの書き方でも(一時変数を導入するか)良いと思います。 @berryzplus さんの案に合わせておきますか?

@beru
Copy link
Contributor Author

beru commented Jul 21, 2018

std::wstring curWord を削減したのも変更点にあるんですね。まぁこのPRの目的としては auto キーワード使用なのでその変更は入れなくても良いと思いますが、別に入れても問題無いと思います。

@@ -37,7 +37,7 @@ SysString CCookieManager::GetCookie(LPCWSTR scope, LPCWSTR cookieName) const
return SysString(L"", 0);
}
wstring key = cookieName;
std::map<wstring, wstring>::const_iterator keyVal = cookies->find(key);
const auto& keyVal = cookies->find(key);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

イテレータを参照型で受け取るのって一般的です?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

素直に auto keyVal = cookies->find(key); でも keyVal の型は自動的に std::map<wstring, wstring>::const_iterator になりますが、それでは不十分と判断されたのでしょうか?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

確かに素直に auto にしておいた方が良さそうですね。

@kobake
Copy link
Member

kobake commented Jul 21, 2018

コメントを入れた「そこで参照型を使う?」以外は概ね良い感じに見えました。

一括変換とはいえこの規模であれば目で追ってレビューできます。

Copy link
Member

@kobake kobake left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.

auto による記載の簡潔化に加えて、変数宣言のスコープが広すぎるような悪しき文化もじわじわと駆逐する姿勢が感じられてとても良いです。

@kobake
Copy link
Member

kobake commented Jul 21, 2018

マ~ジしちゃいます。他にも話したいことある雰囲気も感じますが、そのへんの続きは別Issueか別PRでやりましょうかね。

@beru
Copy link
Contributor Author

beru commented Jul 21, 2018

@kobake レビュー&マージありがとうございます。
早速ですがこのPRの内容に不具合が見つかりました…。
Issue #293 で報告しました。修正PR #294 も作成しました。
お手数ですが確認お願いします。

@m-tmatma m-tmatma added this to the next release milestone Jul 25, 2018
@m-tmatma m-tmatma added the refactoring リファクタリング 【ChangeLog除外】 label Jul 25, 2018
berryzplus added a commit to berryzplus/sakura-editor that referenced this pull request Aug 19, 2018
…られる記述を訂正する

### 確認方法

```cmd
mingw32-make macro/CMacroFactory.o
```

以下のエラーが消えることを確認する

```cmd
macro/CMacroFactory.cpp:92:37: error: invalid initialization of non-const reference of type 'std::_List_iterator<CMacroManagerBase* (*)(const wchar_t*)>&' from an rvalue of type 'std::__cxx11::list<CMacroManagerBase* (*)(const wchar_t*)>::iterator {aka std::_List_iterator<CMacroManagerBase* (*)(const wchar_t*)>}'
  auto& c_it = m_mMacroCreators.begin();
```
berryzplus added a commit to berryzplus/sakura-editor that referenced this pull request Aug 20, 2018
…られる記述を訂正する

rvalueの非const参照を宣言してはならないという以下エラーの対応

macro/CMacroFactory.cpp:92:37: error: invalid initialization of non-const reference of type 'std::_List_iterator<CMacroManagerBase* (*)(const wchar_t*)>&' from an rvalue of type 'std::__cxx11::list<CMacroManagerBase* (*)(const wchar_t*)>::iterator {aka std::_List_iterator<CMacroManagerBase* (*)(const wchar_t*)>}'
  auto& c_it = m_mMacroCreators.begin();
@ds14050 ds14050 added the refactoring リファクタリング 【ChangeLog除外】 label Sep 18, 2018
HoppingTappy pushed a commit to HoppingTappy/sakura that referenced this pull request Jun 11, 2019
auto キーワードを使って iterator 変数の宣言を簡潔にする
HoppingTappy pushed a commit to HoppingTappy/sakura that referenced this pull request Jun 11, 2019
…られる記述を訂正する

rvalueの非const参照を宣言してはならないという以下エラーの対応

macro/CMacroFactory.cpp:92:37: error: invalid initialization of non-const reference of type 'std::_List_iterator<CMacroManagerBase* (*)(const wchar_t*)>&' from an rvalue of type 'std::__cxx11::list<CMacroManagerBase* (*)(const wchar_t*)>::iterator {aka std::_List_iterator<CMacroManagerBase* (*)(const wchar_t*)>}'
  auto& c_it = m_mMacroCreators.begin();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
refactoring リファクタリング 【ChangeLog除外】
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants