var countInstances = function(body, target) {
var globalcounter = 0;
var concatstring = '';
for(var i=0,j=target.length;i<body.length;i++){
concatstring = body.substring(i-1,j);
if(concatstring === target){
globalcounter += 1;
concatstring = '';
}
}
return globalcounter;
};
console.log( countInstances('abcabc', 'abc') ); // ==> 2
console.log( countInstances('ababa', 'aba') ); // ==> 2
console.log( countInstances('aaabbb', 'ab') ); // ==> 1
Я думаю, что это действительно здорово.
Исходя из академического опыта, я могу сказать вам, что аннотации оказались неоценимыми для включения интеллектуальных статических анализаторов для таких языков, как Java. Например, вы можете определить семантику, такую как ограничения состояния, потоки, которым разрешен доступ, ограничения архитектуры и т. Д., И есть довольно много инструментов, которые затем могут читать их и обрабатывать их, чтобы обеспечить гарантии, выходящие за рамки того, что вы получаете от компиляторов. Вы даже можете написать вещи, которые проверяют предусловия / постусловия.
Мне кажется, что-то подобное особенно необходимо в Python из-за его более слабой типизации, но на самом деле не было конструкций, которые сделали бы это простым и частью официального синтаксиса.
Есть и другие варианты использования аннотаций, не зависящие от уверенности. Я вижу, как применить свои инструменты на основе Java к Python. Например, у меня есть инструмент, который позволяет вам назначать специальные предупреждения для методов и дает вам указания, когда вы вызываете их, что вы должны прочитать их документацию (например, представьте, что у вас есть метод, который нельзя вызывать с отрицательным значением, но он не интуитивно понятно из названия). С аннотациями я мог бы написать что-то подобное для Python. Точно так же инструмент, который организует методы в большом классе на основе тегов, может быть написан при наличии официального синтаксиса.
Ури уже дал правильный ответ, так что вот менее серьезный: так вы можете сделать свои строки документации короче.