这困扰了我一段时间,我无法找到一个感觉正确的解决方案......
给定一个OO语言,其中对象属性的通常命名约定是camelCased,以及像这样的示例对象:
{
id: 667,
firstName: "Vladimir",
lastName: "Horowitz",
canPlayPiano: true
}
Run Code Online (Sandbox Code Playgroud)
我应该如何在PostgreSQL表中建模这个结构?
有三个主要选择:
他们每个人都有自己的缺点:
不带引号的标识符会自动折叠为小写.这意味着您可以使用canPlayPiano列创建表,但混合大小写永远不会到达数据库.当您检查表时,该列将始终显示为canplaypiano- 在psql中,pgadmin,解释结果,错误消息,所有内容.
带引号的标识符保留了它们的大小写,但是一旦你创建它们,你将始终必须引用它们.IOW,如果您创建一个包含"canPlayPiano"列的表,SELECT canPlayPiano ...则会失败.这会给所有SQL语句增加许多不必要的噪音.
带下划线的小写名称是明确的,但它们不能很好地映射到应用程序语言正在使用的名称.您必须记住为storage(can_play_piano)和code(canPlayPiano)使用不同的名称.它还可以防止某些类型的代码自动化,其中属性和数据库列需要命名相同.
所以我陷入了岩石和坚硬的地方(和一块大石头;有三种选择).无论我做什么,有些部分会感到尴尬.在过去的10年左右,我一直在使用选项3,但我一直希望有更好的解决方案.
我很感激您的任何建议.
PS:我确实意识到案例折叠和引号的需求来自于SQL标准,或者更确切地说是PostgreSQL对标准的改编.我知道它是如何工作的; 我对有关最佳实践的建议比对PG如何处理标识符的解释更感兴趣.
oop postgresql database-design camelcasing naming-conventions
我有一个包含多个 eslint 规则违规的大型 JavaScript 文件。我正在尝试禁用它们并一次解决一个问题。下面的代码表明我可以毫无问题地禁用它们,但不是关于驼峰命名规则的规则,也可能是其他个别规则。我使用的方法应该根据 eslint 文档工作,但我的解释肯定有缺陷。
代码很短,并没有消除有关驼峰式大小写的错误。
/* eslint-disable /* eslint-disable// works but gets everything.
`/* eslint (camelcase) : 0 */
/* eslint camelcase : ["error", {ignoreDestructuring:true}] */
Run Code Online (Sandbox Code Playgroud)
const Lesson_1 = {title:'The Home Row Keys.'},'lesson': 'jjj fff jjj fff'}
只是得到相同的驼峰错误而不做任何更改。eslint 文档说只是禁用整个规则,但没有指定上面列出的方法。
我想要实现的是这样的:
>>> camel_case_split("CamelCaseXYZ")
['Camel', 'Case', 'XYZ']
>>> camel_case_split("XYZCamelCase")
['XYZ', 'Camel', 'Case']
Run Code Online (Sandbox Code Playgroud)
所以我搜索并找到了这个完美的正则表达式:
(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])
Run Code Online (Sandbox Code Playgroud)
作为我尝试的下一个逻辑步骤:
>>> re.split("(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])", "CamelCaseXYZ")
['CamelCaseXYZ']
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用,如何从python中的链接问题获得结果?
编辑:解决方案摘要
我用一些测试用例测试了所有提供的解决方案:
string: ''
AplusKminus: ['']
casimir_et_hippolyte: []
two_hundred_success: []
kalefranz: string index out of range # with modification: either [] or ['']
string: ' '
AplusKminus: [' ']
casimir_et_hippolyte: []
two_hundred_success: [' ']
kalefranz: [' ']
string: 'lower'
all algorithms: ['lower']
string: 'UPPER'
all algorithms: ['UPPER']
string: 'Initial'
all algorithms: ['Initial']
string: 'dromedaryCase'
AplusKminus: ['dromedary', 'Case']
casimir_et_hippolyte: ['dromedary', …Run Code Online (Sandbox Code Playgroud) 我对不同类型的标识符案例感兴趣,以及人们称之为什么.您是否知道此列表或其他替代名称的任何添加内容?
我有一个字符串,我转换为TextInfo.ToTitleCase并删除下划线并将字符串连接在一起.现在我需要将字符串中的第一个字符和第一个字符更改为小写字母,由于某种原因,我无法弄清楚如何完成它.在此先感谢您的帮助.
class Program
{
static void Main(string[] args)
{
string functionName = "zebulans_nightmare";
TextInfo txtInfo = new CultureInfo("en-us", false).TextInfo;
functionName = txtInfo.ToTitleCase(functionName).Replace('_', ' ').Replace(" ", String.Empty);
Console.Out.WriteLine(functionName);
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
结果:ZebulansNightmare
期望的结果:zebulansNightmare
更新:
class Program
{
static void Main(string[] args)
{
string functionName = "zebulans_nightmare";
TextInfo txtInfo = new CultureInfo("en-us", false).TextInfo;
functionName = txtInfo.ToTitleCase(functionName).Replace("_", string.Empty).Replace(" ", string.Empty);
functionName = $"{functionName.First().ToString().ToLowerInvariant()}{functionName.Substring(1)}";
Console.Out.WriteLine(functionName);
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
产生所需的输出
是否应该调用返回XML流的方法
public Stream getXmlStream();
Run Code Online (Sandbox Code Playgroud)
或者相反
public Stream getXMLStream();
Run Code Online (Sandbox Code Playgroud)
你对此有何看法?什么是最佳做法?
我经常看到Java类名称
XmlReader
Run Code Online (Sandbox Code Playgroud)
代替
XMLReader
Run Code Online (Sandbox Code Playgroud)
我的直觉是完全是大写的缩略词,但显然很多人都有不同的看法.或许这只是因为许多代码生成器在使用首字母缩略词时遇到了麻烦......
所以我想听听民意.如何将包含首字母缩略词的类名称大写?
我知道Python中的类通常使用camelCase.
如果文件只包含类,那么包含该类的文件也是camelCase也是常规约定吗?
例如,是否应该将类className存储在?className.py而不是class_name.py?
如何在带正则表达式的文档中找到所有CamelCased单词?我只关心领先的上骆驼案(即第一个字母大写的骆驼套话).
camelcasing ×10
python ×3
java ×2
regex ×2
abbreviation ×1
c# ×1
case ×1
constants ×1
disable ×1
eslint ×1
filenames ×1
naming ×1
oop ×1
pascalcasing ×1
postgresql ×1
search ×1
title-case ×1
tolower ×1
uppercase ×1