Длина имени должна быть связана с длиной его области видимости. Переменным с крошечной областью видимости можно присваивать очень короткие имена, но у переменных с большей областью видимости имена должны быть длинными. … Таки образом, чем длиннее область видимости, тем более длинным и точным должно быть ее имя.
Пхе!
FunctionPointerTypesAreEquivalentAssumingGenericMethodParametersAreEquivalentIfTheirIndicesMatch не хотите?
больше трэша
FunctionPointerTypesAreEquivalentAssumingGenericMethodParametersAreEquivalentIfTheirIndicesMatch at TypeHelper, Microsoft.VisualStudio.ArchitectureTools.PEReader (15)
TypeDefOrRefOrSpecIsClassButNotValueTypeBaseClass at Reader, Microsoft.VisualStudio.TeamTest.TestGeneration.Cci (14)
ChangeMergeDynamicSnapshotJobScheduleWithJobNameForLateBoundComClients at MergePublication, Microsoft.SqlServer.Rmo (14)
ChangeMergeDynamicSnapshotJobScheduleWithJobIdForLateBoundComClients at MergePublication, Microsoft.SqlServer.Rmo (14)
ParameterListsAreEquivalentAssumingGenericMethodParametersAreEquivalentIfTheirIndicesMatch at TypeHelper, Microsoft.VisualStudio.ArchitectureTools.PEReader (14)
get_ArgumentOutOfRange_BatchSizeMustBeNoGreaterThanBoundedCapacity at Resource, System.Threading.Tasks.Dataflow (14)
ParametersAreEquivalentAssumingGenericMethodParametersAreEquivalentIfTheirIndicesMatch at TypeHelper, Microsoft.VisualStudio.ArchitectureTools.PEReader (13)
TypesAreEquivalentAssumingGenericMethodParametersAreEquivalentIfTheirIndicesMatch at TypeHelper, Microsoft.VisualStudio.ArchitectureTools.PEReader (13)
get_DescriptionAttributeLabelOutsidePlotAreaStyle_LabelOutsidePlotAreaStyle at SR, System.Web.DataVisualization (13)
get_DescriptionAttributeAnnotationPositionChangingEventArgs_AnnotationPositionChangingEventArgs at SR, System.Web.DataVisualization (13)
get_DescriptionAttributeLabelOutsidePlotAreaStyle_LabelOutsidePlotAreaStyle at SR, System.Windows.Forms.DataVisualization (13)
get_DescriptionAttributeAnnotationPositionChangingEventArgs_AnnotationPositionChangingEventArgs at SR, System.Windows.Forms.DataVisualization (13)
Trace_Event_Message_OnlineDeployment_ApplyingSettingsAndOptions_Starting_NoDatabase at SR, Microsoft.AnalysisServices.DeploymentEngine (12)
get_ExceptionThreeLineBreakNumberOfLinesInBreakFormatInvalid at SR, System.Web.DataVisualization (12)
get_ExceptionThreeLineBreakNumberOfLinesInBreakValueInvalid at SR, System.Web.DataVisualization (12)
get_ExceptionAxisScaleMinimumValueIsGreaterThenMaximumDataPoint at SR, System.Web.DataVisualization (12)
get_ExceptionThreeLineBreakNumberOfLinesInBreakFormatInvalid at SR, System.Windows.Forms.DataVisualization (12)
get_ExceptionThreeLineBreakNumberOfLinesInBreakValueInvalid at SR, System.Windows.Forms.DataVisualization (12)
get_ExceptionAxisScaleMinimumValueIsGreaterThenMaximumDataPoint at SR, System.Windows.Forms.DataVisualization (12)
get_NumberOfTheDiskWithTheStartOfTheCentralDirectory at ZipIOEndOfCentralDirectoryBlock, WindowsBase (12)
get_TotalNumberOfEntriesInTheCentralDirectoryOnThisDisk at ZipIOEndOfCentralDirectoryBlock, WindowsBase (12)
~EmbeddedBase<Microsoft::VisualStudio::PkgDef::CPkgDefManagement> at EmbeddedBase<Microsoft::VisualStudio::PkgDef::CPkgDefManagement>, Microsoft.VisualStudio.Settings (11)
!EmbeddedBase<Microsoft::VisualStudio::PkgDef::CPkgDefManagement> at EmbeddedBase<Microsoft::VisualStudio::PkgDef::CPkgDefManagement>, Microsoft.VisualStudio.Settings (11)
~EmbeddedBase<Microsoft::VisualStudio::PkgDef::CPkgDefManagement> at EmbeddedBase<Microsoft::VisualStudio::PkgDef::CPkgDefManagement>, Microsoft.VisualStudio.Settings (11)
!EmbeddedBase<Microsoft::VisualStudio::PkgDef::CPkgDefManagement> at EmbeddedBase<Microsoft::VisualStudio::PkgDef::CPkgDefManagement>, Microsoft.VisualStudio.Settings (11)
get_BadMetadataInExportTypeTableNoSuchAssemblyReference at ExceptionStrings, Microsoft.VisualStudio.TeamTest.TestGeneration.Cci (11)
get_BadMetadataInExportTypeTableNoSuchParentType at ExceptionStrings, Microsoft.VisualStudio.TeamTest.TestGeneration.Cci (11)
get_Trace_Event_Message_OnlineDeployment_ApplyingSettingsAndOptions_Done at SR, Microsoft.AnalysisServices.DeploymentEngine (11)
GetCimTypeFromDotNetValueOrThrowAnException at CimConverter, Microsoft.Management.Infrastructure (11)
get_AssociatedMetadataTypeTypeDescriptor_MetadataTypeContainsUnknownProperties at DataAnnotationsResources, System.ComponentModel.DataAnnotations (11)
get_EnumDataTypeAttribute_TypeNeedsToBeAnEnum at DataAnnotationsResources, System.ComponentModel.DataAnnotations (11)
get_ConvertToDateTimeOnlyForDateTimeOrString at Strings, System.Data.Linq (11)
var names =
from assemblyName in assemblyNames.Skip(3)
let assembly = TryLoad(assemblyName)
where assembly != null && assembly.ImageRuntimeVersion == rv
from t in TryGetTypes(assembly)
from m in t.GetMethods(bf)
where !m.Name.Contains(".")
select new
{
Name = m.Name,
Type = t.Name,
Assembly = assembly.GetName().Name,
Words = SplitWords(m.Name).Count()
} into r
orderby r.Words descending
select r;
весь код
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
// TODO: set your ownvar gacutil = new Process()
{
StartInfo = new ProcessStartInfo(@"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\gacutil.exe")
{
Arguments = "/l",
RedirectStandardOutput = true,
UseShellExecute = false,
}
};
gacutil.Start();
var output = gacutil.StandardOutput;
var assemblyNames = new List<string>();
while (!output.EndOfStream)
{
var name = output.ReadLine();
if (string.IsNullOrEmpty(name)) continue;
assemblyNames.Add(name);
}
assemblyNames.RemoveAt(assemblyNames.Count - 1);
var rv = typeof(int).Assembly.ImageRuntimeVersion;
var bf = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
var names =
from assemblyName in assemblyNames.Skip(3)
let assembly = TryLoad(assemblyName)
where assembly != null && assembly.ImageRuntimeVersion == rv
from t in TryGetTypes(assembly)
from m in t.GetMethods(bf)
where !m.Name.Contains(".")
select new
{
Name = m.Name,
Type = t.Name,
Assembly = assembly.GetName().Name,
Words = SplitWords(m.Name).Count()
} into r
orderby r.Words descending
select r;
foreach (var name in names.Take(100))
{
Console.WriteLine("{0:50} at {1}, {2} ({3})", name.Name, name.Type, name.Assembly, name.Words);
}
Console.WriteLine("Done.");
Console.ReadKey();
}
private static Assembly TryLoad(string assemblyName)
{
try
{
return Assembly.ReflectionOnlyLoad(assemblyName);
}
catch
{
return null;
}
}
private static Type[] TryGetTypes(Assembly assembly)
{
try
{
return assembly.GetTypes() ?? new Type[0];
}
catch
{
return new Type[0];
}
}
private static IEnumerable<string> SplitWords(string name)
{
StringBuilder current = new StringBuilder();
bool prevUpper = false;
foreach (var nameChar in name)
{
bool upper = char.IsUpper(nameChar) || char.IsDigit(nameChar);
if (upper && !prevUpper && current.Length > 0)
{
yield return current.ToString();
current.Clear();
}
prevUpper = upper;
current.Append(nameChar);
}
if (current.Length > 0)
{
yield return current.ToString();
}
}
}
Здравствуйте, kl, Вы писали:
kl>Самые длинные имена методов я видел в junit тестах. Что-то типа testThatThisSillyBugIsIndeedFixedAndDoesNotOccurUnderTheseExoticConditions.
Всё же многословные идентификаторы ужасно читаются, хоть в camelCase-е, хоть в других нотациях (но в camelCase-е, конечно, хуже всего). Если возникает надобность в длинных названиях (а она в названии теста есть, это правда), нужно писать нормальный текст и не морочить людям голову. И читается лучше и вывод будет лучше.
Здравствуйте, kl, Вы писали:
kl>Здравствуйте, Философ, Вы писали:
Ф>>ЗЫ: кто больше!?
kl>Самые длинные имена методов я видел в junit тестах. Что-то типа testThatThisSillyBugIsIndeedFixedAndDoesNotOccurUnderTheseExoticConditions.
Это наверное потому, что у них DescriptionAttribute отсутствует
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Философ, Вы писали:
Ф> kl>Здравствуйте, Философ, Вы писали:
Ф> Ф>>ЗЫ: кто больше!?
Ф> kl>Самые длинные имена методов я видел в junit тестах. Что-то типа testThatThisSillyBugIsIndeedFixedAndDoesNotOccurUnderTheseExoticConditions.
Ф> Это наверное потому, что у них DescriptionAttribute отсутствует
И как оно будет выглядеть? Так что-ли?!
[Description("Test that this silly bug is indeed fixed and does not occur under these exotic conditions")]
public void testThatThisSillyBugIsIndeedFixedAndDoesNotOccurUnderTheseExoticConditions()
{
...
}
Здравствуйте, vsb, Вы писали:
vsb> kl>Самые длинные имена методов я видел в junit тестах. Что-то типа testThatThisSillyBugIsIndeedFixedAndDoesNotOccurUnderTheseExoticConditions. vsb> Пора бы им делать просто vsb>
vsb> Всё же многословные идентификаторы ужасно читаются, хоть в camelCase-е, хоть в других нотациях (но в camelCase-е, конечно, хуже всего). Если возникает надобность в длинных названиях (а она в названии теста есть, это правда), нужно писать нормальный текст и не морочить людям голову. И читается лучше и вывод будет лучше.
Не надо. Тогда в IDEA перестанет работать копи-паст имени метода из отчёта CI или ещё откуда в Navigate to symbol, придётся использовать полнотекстовый поиск и разруливать как-то неоднозначности, если методы имеют одно имя у разных классов.
Здравствуйте, ·, Вы писали:
vsb>> Всё же многословные идентификаторы ужасно читаются, хоть в camelCase-е, хоть в других нотациях (но в camelCase-е, конечно, хуже всего). Если возникает надобность в длинных названиях (а она в названии теста есть, это правда), нужно писать нормальный текст и не морочить людям голову. И читается лучше и вывод будет лучше. ·>Не надо. Тогда в IDEA перестанет работать копи-паст имени метода из отчёта CI или ещё откуда в Navigate to symbol, придётся использовать полнотекстовый поиск и разруливать как-то неоднозначности, если методы имеют одно имя у разных классов.
Почему перестанет? Доработают чуток и не перестанет. Также в отчёте можно (имхо и нужно) выводить имя файла и номер строки. В идеале это кликабельная ссылка вида source:///myproject/src/test/MyTest.java:123 на которую Idea вешает обработчик и при клике в браузере сразу переходит в нужное место.
·>[Description("Test that this silly bug is indeed fixed and does not occur under these exotic conditions")]
·>public void testBugId()
·>{
·>...
·>}
·>
Здравствуйте, vsb, Вы писали:
vsb>>> Всё же многословные идентификаторы ужасно читаются, хоть в camelCase-е, хоть в других нотациях (но в camelCase-е, конечно, хуже всего). Если возникает надобность в длинных названиях (а она в названии теста есть, это правда), нужно писать нормальный текст и не морочить людям голову. И читается лучше и вывод будет лучше. vsb>·>Не надо. Тогда в IDEA перестанет работать копи-паст имени метода из отчёта CI или ещё откуда в Navigate to symbol, придётся использовать полнотекстовый поиск и разруливать как-то неоднозначности, если методы имеют одно имя у разных классов. vsb>Почему перестанет? Доработают чуток и не перестанет. Также в отчёте можно (имхо и нужно) выводить имя файла и номер строки. В идеале это кликабельная ссылка вида source:///myproject/src/test/MyTest.java:123 на которую Idea вешает обработчик и при клике в браузере сразу переходит в нужное место.
Вот видишь... дорабатывать приходится, плугины к разным браузерам под разные операционки писать, головная боль одна. А так всё работает из коробки.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, enji, Вы писали:
E>Здравствуйте, ·, Вы писали:
E>·>И как оно будет выглядеть? Так что-ли?! E>·>
E>·>[Description("Test that this silly bug is indeed fixed and does not occur under these exotic conditions")]
E>·>public void testBugId()
E>·>{
E>·>...
E>·>}
E>·>
E>где BugId — номер бага в нотации вашего трекера
В порядочном проекте тесты не только для багов пишут. А в хорошем проекте количество тестов на порядки превышает количество багов.
Да и один баг может покрыться несколькими тестами — 1-к-1 отношения тут нет, вот и придётся изобретать ещё одну нотацию именования, ради чего — неясно.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
A>Длина имени должна быть связана с длиной его области видимости. Переменным с крошечной областью видимости можно присваивать очень короткие имена, но у переменных с большей областью видимости имена должны быть длинными. … Таки образом, чем длиннее область видимости, тем более длинным и точным должно быть ее имя.
A>
Хихи-хаха а мне коллега такое задвигать на полном серьёзе начал.
И даже везде куда дотянулся начал применять.
В плюсовом проекте.
Какие-то куцие у вас сигнатуры функций.
Вот в Objective-C, из стандартного класса NSBitmapImageRep:
initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bitmapFormat:bytesPerRow:bitsPerPixel: