SonarLint 说我应该删除或重命名正在使用的参数
SonarLint says I should remove or rename the parameter being used
Sonar lint 说:
Remove the unused function parameter "customParams" or rename it to "_customParams" to make intention explicit.
但是,“getNextUrl”方法中使用了“customParams”参数,我做错了什么?
class Pagination {
private readonly maxPage: number
constructor (
private readonly data: Array<{}>,
private readonly currentPage: number,
private readonly limit: number,
private readonly count: number,
private readonly urlRoute: string,
private readonly customParams: {} = {}
) {
this.maxPage = Math.ceil(count / limit)
}
private getNextUrl (): string | null {
if (this.currentPage >= this.maxPage) {
return null
}
const query = toQueryString({
page: this.currentPage + 1,
limit: this.limit,
...this.customParams
})
return getUrl(this.urlRoute) + '?' + query
}
我认为这意味着您在构造函数中定义了它,但从不将某些内容传递给 customParams
的 Pagination() 构造函数,因此您允许 customParams 像这样发送:
const paginator = new Pagination(
[{}], // private readonly data: Array<{}>,
0, // private readonly currentPage: number,
100, // private readonly limit: number,
87, // private readonly count: number,
'/pages', // private readonly urlRoute: string,
{ someCustom: 3000 }, // private readonly customParams: {} = {}
);
可以填写 customParams,但在您的代码中您实际上没有提供任何内容... customParams 仅定义为 {}
,这就是您启动它的方式。如果还没有人使用 customParams,为什么还要定义它呢? (YAGNI = 你不需要它)。
也许实际使用 customParams
或像使用 maxPage
一样将其设置在文件顶部,或者根本不包含它。
如果你要 运行 cmd
+ shift
+ f
(在 Mac VS-Code/Sublime/Atom/etc 你的代码编辑器中)你可以搜索对于 Pagination
class 的所有用法。目前似乎没有用例(实际定义 customParams
即构造函数中传递的第 6 个参数的动态和硬编码都没有。
此外,在我们讨论 code-styling 时,一些 linter 会指责您没有使用 named params
接受所有潜在可选参数的单个对象参数的概念(您可能有一个4+ 参数的长列表)因为该策略更容易记住参数的顺序。软件的用户很难记住他们可以为 customParams
传递第 6 个参数(特别是如果它是可选的)。因此,作为一个潜在的改进,尝试定义具有许多参数(通常超过 3 个)的函数,其中只有一个参数是一个对象并且可以采用可选参数。
interface PaginationOptions {
data: Array<{}>,
currentPage: number,
limit: number,
count: number,
urlRoute: string,
customParams?: Record<string, any>
}
constructor({ data, currentPage, limit, count, urlRoute, customParams = {} }: PaginationOptions)
Sonar lint 说:
Remove the unused function parameter "customParams" or rename it to "_customParams" to make intention explicit.
但是,“getNextUrl”方法中使用了“customParams”参数,我做错了什么?
class Pagination {
private readonly maxPage: number
constructor (
private readonly data: Array<{}>,
private readonly currentPage: number,
private readonly limit: number,
private readonly count: number,
private readonly urlRoute: string,
private readonly customParams: {} = {}
) {
this.maxPage = Math.ceil(count / limit)
}
private getNextUrl (): string | null {
if (this.currentPage >= this.maxPage) {
return null
}
const query = toQueryString({
page: this.currentPage + 1,
limit: this.limit,
...this.customParams
})
return getUrl(this.urlRoute) + '?' + query
}
我认为这意味着您在构造函数中定义了它,但从不将某些内容传递给 customParams
的 Pagination() 构造函数,因此您允许 customParams 像这样发送:
const paginator = new Pagination(
[{}], // private readonly data: Array<{}>,
0, // private readonly currentPage: number,
100, // private readonly limit: number,
87, // private readonly count: number,
'/pages', // private readonly urlRoute: string,
{ someCustom: 3000 }, // private readonly customParams: {} = {}
);
可以填写 customParams,但在您的代码中您实际上没有提供任何内容... customParams 仅定义为 {}
,这就是您启动它的方式。如果还没有人使用 customParams,为什么还要定义它呢? (YAGNI = 你不需要它)。
也许实际使用 customParams
或像使用 maxPage
一样将其设置在文件顶部,或者根本不包含它。
如果你要 运行 cmd
+ shift
+ f
(在 Mac VS-Code/Sublime/Atom/etc 你的代码编辑器中)你可以搜索对于 Pagination
class 的所有用法。目前似乎没有用例(实际定义 customParams
即构造函数中传递的第 6 个参数的动态和硬编码都没有。
此外,在我们讨论 code-styling 时,一些 linter 会指责您没有使用 named params
接受所有潜在可选参数的单个对象参数的概念(您可能有一个4+ 参数的长列表)因为该策略更容易记住参数的顺序。软件的用户很难记住他们可以为 customParams
传递第 6 个参数(特别是如果它是可选的)。因此,作为一个潜在的改进,尝试定义具有许多参数(通常超过 3 个)的函数,其中只有一个参数是一个对象并且可以采用可选参数。
interface PaginationOptions {
data: Array<{}>,
currentPage: number,
limit: number,
count: number,
urlRoute: string,
customParams?: Record<string, any>
}
constructor({ data, currentPage, limit, count, urlRoute, customParams = {} }: PaginationOptions)