- 1
- 2
- 3
- 4
- 5
var api = angular.module('GithubApi', []);
api.controller('GithubStatus', function ($scope, $http) {
$http.get('/api.json')
.success(function (response) { $scope.api = response; });
});
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−3
var api = angular.module('GithubApi', []);
api.controller('GithubStatus', function ($scope, $http) {
$http.get('/api.json')
.success(function (response) { $scope.api = response; });
});
Пейсатели ж.скрипт фреймоврков не перестают радовать. Код несколько упрощен, но суть должна быть очевидна каждому: переменная api будет затерта как только она будет создана строкой типа "[object Object]" потому что в $scope есть поле с таким же значением.
zvse 10.11.2015 07:06 # +3
я не работал с ангуляром и понятия не имею что такое переменная $scope
по мне так api и $scope это две совершенно разные вещи, которые почти не пересекаются
wvxvw 10.11.2015 10:31 # 0
$scope - это так, по большому счету ангулар называет элемент ХТМЛя куда складываются разные данные посредством создания новых аттрибутов у этого элемента. К одному и тому же элементу можно прикрепить и скоп и контроллер (оба делают то же самое, но зачем-то в ангулар их два). Приложение на ангулар должно иметь как минимум один контроллер. Но вот незадача: переменные в области видимости скрипта контроллера ангулар похерит когда будет создавать аттрибуты скопа, если, случайно, имена совпадут, и оба будут прикреплены к одному и тому же элементу.
Vindicar 10.11.2015 10:45 # 0
1024-- 10.11.2015 16:10 # 0
Звучит так, как будто в остальных языках такого нет.
Какая разница, какой язык (ну, кроме сильно модульных/функциональных), если библиотека портит наши переменные, никто об этом не должен по умолчанию знать.
bormand 10.11.2015 17:41 # +2
1024-- 10.11.2015 20:36 # −2
guest 10.11.2015 17:49 # +4
Язык, поддерживающий модульность и структурное программирование?
Так это почти любой современный язык, ну кроме разве что PHP и JavaScript
inkanus-gray 10.11.2015 17:51 # 0
guest 10.11.2015 17:53 # 0
И уж конечно в сях функция не видит адресов в стеке вызвавшей её функции, если ей их явно не передали, и испортить чужие переменные не может
bormand 10.11.2015 18:20 # +2
Да может в общем-то, если с указателями поиграть... Но это уже UB.
guest 10.11.2015 18:23 # +2
Vasiliy 10.11.2015 19:46 # 0
3_14dar 10.11.2015 19:49 # +1
bormand 10.11.2015 20:10 # 0
Vasiliy 10.11.2015 20:37 # −1
bormand 10.11.2015 20:46 # +2
Синдром утёнка?
Vasiliy 10.11.2015 20:50 # 0
не.
Я не вижу не обходимости делать глобальные переменные менее глобальными. Они же не "проваливаются" сами по себе внутрь методов.
guest 10.11.2015 21:15 # 0
Stallman 10.11.2015 21:19 # +2
Vasiliy 11.11.2015 09:23 # 0
3_14dar 10.11.2015 22:44 # 0
guest 10.11.2015 22:45 # +1
3_14dar 10.11.2015 22:44 # 0
Stallman 10.11.2015 20:22 # +3
Vasiliy 10.11.2015 20:38 # −1
guest 10.11.2015 20:42 # +2
Нету ни стандартного описания модуля, ни стандарта на описание депенденсов, не говоря уже о едином репозитории.
Пеар был, да сдулся. Компосёр в альфе. У JS вообще их 100500 между собой не совместимых.
Vasiliy 10.11.2015 20:48 # 0
ну нормальная такая себе альфа. работает и не жужу.
>У JS вообще
я только 2 знаю npm и Bower
bormand 10.11.2015 20:51 # 0
В ангуляре ещё, емнип, что-то было.
Vasiliy 10.11.2015 20:55 # +2
это фигушки которые могут ставить с репозитария и обновлять при необходимости.
Ангуляр использовал requirejs
guest 10.11.2015 21:03 # +1
Вот на пистончике я могу написать библиотеку, опубликовать её в pypi, и другие люди смогут её использовать и на нее депендится.
А как мне написать библиотеку на js? через requirejs? через npm? bower?
Vasiliy 11.11.2015 09:28 # 0
Stallman 10.11.2015 20:51 # 0
Vasiliy 10.11.2015 20:52 # −2
Stallman 10.11.2015 20:54 # +1
Vasiliy 11.11.2015 09:29 # 0
3_14dar 10.11.2015 22:45 # 0
bormand 10.11.2015 20:53 # 0
Stallman 10.11.2015 20:57 # +2
Vasiliy 11.11.2015 09:30 # +2
я просто оставлю это
gost 12.11.2015 11:56 # 0
Ёбанаврот...
roman-kashitsyn 12.11.2015 12:02 # +4
Проводится каждый год 31 декабря новогодним обращением президента РФ.
Stallman 12.11.2015 12:29 # +3
В нашей супергитлерасинхронной экмапараше нету примитивов синхронизации, поэтому давайте срать калбеками в кучу и делать вид, что они как бы и есть
3_14dar 12.11.2015 18:21 # 0
1024-- 10.11.2015 20:48 # −1
Сильная модульность - когда нет глобальных переменных, модули зависят только от своих параметров и т.п. Сильномодульные языки предоставляют лёгкий способ реализовать сильную модульность и сложный/невозможный способ сломать её.
Например, JS - среднемодульный, т.к. простым образом за счёт замыканий можно реализовать полностью изолированные модули. Но есть глобальные переменные и переменные внешних скопов, которые можно менять изнутри.
Аналогично, брейнфак - слабомодульный.
guest 10.11.2015 20:51 # 0
Спасибо.
bormand 10.11.2015 20:52 # 0
kegdan 10.11.2015 20:58 # +2
1024-- 10.11.2015 21:10 # −2
В PHP/python функции стремятся к сильной модульности огороженности.
В функциональных языках скорее всего сильная огороженность.
bormand 10.11.2015 21:12 # 0
guest 10.11.2015 21:15 # +1
то функция выродится в приложение и все переменные станут глобальными:)
Слушайте, Дийкстра еще в 70х писал про стуктурное программирование
bormand 10.11.2015 21:17 # +1
guest 10.11.2015 21:20 # +1
Итого: сильномодульным можно назвать такой, и только такой язык который позволяет написать 2 функции. Одну пустую. Во второй - весь код.
guest 10.11.2015 21:21 # 0
И кстати а паскале и бейсике можно писать процедуры, а не функции
лажа определение
1024-- 10.11.2015 21:24 # 0
Главное в определении учесть брейнфак.
guest 10.11.2015 21:31 # 0
bormand 10.11.2015 21:34 # +3
Ну нет, блять, минус одно.
Stallman 10.11.2015 21:36 # 0
bormand 10.11.2015 21:41 # +1
1024-- 10.11.2015 23:07 # 0
a + b как a .add (b) vs add(a,b)
inkanus-gray 10.11.2015 21:42 # 0
С динамическими/виртуальными всё хуже. При вызове такого метода нельзя быть уверенным в том, какая именно «функция» вызовется, потому что результат зависит от текущего состояния таблицы виртуальных методов объекта. Фактически виртуальный метод — это не функция, а переменная, указывающая на функцию.
guest 10.11.2015 22:40 # 0
Кстати, в пистоне есть разница между статическими и класс-методами
1024-- 10.11.2015 23:09 # 0
О, вот хорошее отличие.
Хотя, программист описывает именно эти функции. Про указатели же он (или вообще не он) говорит где-то в отдельном месте, порождая объекты: A a = new B;
kegdan 11.11.2015 07:37 # 0
inkanus-gray 10.11.2015 21:44 # 0
bormand 10.11.2015 21:45 # +3
inkanus-gray 10.11.2015 21:46 # +2
И из-за какого-то return придумали новый язык?
guest 10.11.2015 21:48 # +1
можно его вернуть
bormand 10.11.2015 21:55 # 0
inkanus-gray 10.11.2015 21:59 # 0
guest 10.11.2015 22:05 # +1
kegdan 11.11.2015 07:41 # 0
guest 10.11.2015 21:46 # 0
bormand 10.11.2015 21:48 # +3
guest 10.11.2015 21:54 # 0
bormand 10.11.2015 21:58 # +2
guest 10.11.2015 22:10 # −2
imihajlov 11.11.2015 10:36 # +3
void foo(void) -- функция без аргументов,
void bar() -- функция с любыми аргументами.
1024-- 10.11.2015 21:18 # −2
Stallman 10.11.2015 21:15 # +1
guest 10.11.2015 21:19 # +5
Вот так бывает с теми, кто много пишет на JS.
1024-- 10.11.2015 21:22 # −3
guest 10.11.2015 21:28 # +2
>>объектно-ориентированный
Использующий концепцию объекта как сущности, содержащей данные и методы для работы с ними.
Хотя: даже в ЯП без ООП можно реализовать полуООП с opaque types, что и делают Win32API, Linux итд.
>>динамическая типизация
Знание о типе данных в момент исполнения программы.
Хотя: например в java в рантайме у генериков может потеряться информация о параметре: является-ли джава динамически типизированной?
>>байт
Ну тут все просто: байт это октет. Восемь бит.
В практически всех архитектурах, разработанных за последние 40 лет.
Хотя: термин конечно иплементейшен депендент, именно потому во всяких RFC предпочитают термин octet, а в нормальных изыках типа сей нету типа byte
3_14dar 10.11.2015 22:48 # 0
guest 10.11.2015 22:55 # +1
От привода к обжекту ничего не изменится: тип выражения все равно можно будет посчитать
3_14dar 10.11.2015 23:13 # −1
в хуй?
В питоне тоже во многих случаях можно узнать тип возвращаемого значения если он не зависит от внешних данных, и? В нем есть тот же object - PyObject
Vasiliy 11.11.2015 12:57 # −3
3_14dar 11.11.2015 22:33 # −1
3_14dar 12.11.2015 18:23 # 0
kegdan 12.11.2015 18:28 # 0
>> в хуй?
>>
Я под столом
Vasiliy 13.11.2015 11:30 # 0
1024-- 10.11.2015 23:22 # 0
> тип выражения все равно можно будет посчитать
Только если исполнить программу.
Возьмём какой-нибудь язык со статической типизацией:
p - void*, type - int, годнота, статика, тип посчитан!
roman-kashitsyn 11.11.2015 11:23 # 0
guest 14.11.2015 15:59 # 0
1024-- 14.11.2015 16:48 # 0
Я с таким же успехом могу сказать, что любой язык - статически типизированный т.к. хотя бы об одном типе "object" известно на этапе компиляции, а некоторые авторы компиляторов/интерпретаторов в целях оптимизации не считают тип выражения, т.к. он всё равно будет заранее известен и равен "object", из-за чего языки считают динамически типизированными и говорят, что на этапе компиляции типы не проверяются, но они-то на самом деле проверяются!
Ну и что даёт нам знание о типе void*? Только то, что компилятор не смог на этапе компиляции вычислить реальный тип.
Ах это я засунул туда int, я и виноват? Но компилятор засунул в слова и байты наши intы, floatы, char*ы и struct pitux, зачем тогда говорить о интах и питухах, когда все типы вычислены на этапе проектирования процессора?
Итого, тип данных - понятие, зависимое от уровня абстракции. На одном уровне это слова и байты, на другом - указатели и целые, на третьем - пользовательские питухи. Языки со статической типизацией просто предоставляют нам возможность посчитать чуть больше типов на каком-то уровне абстракции. Если же мы поднимаемся выше этого уровня абстракции ("легальный" путь - динамический полиморфизм), мы получаем шиш и динамическую типизацию (может быть, рукотворную).
dxd 11.11.2015 11:58 # +1
kegdan 11.11.2015 13:59 # +1
1024-- 10.11.2015 21:24 # −2
kegdan 11.11.2015 22:47 # 0
bormand 10.11.2015 20:59 # +1
> лёгкий способ реализовать сильную модульность
// внутри сишки
static int x = 0;
> сложный/невозможный способ сломать её
Только через прямое ковыряние в памяти на грани UB'а. Адекватными способами обойти эту модульность нельзя.
1024-- 10.11.2015 21:06 # −2
Хм, вот заняли слово "модульность" подключающимися кусками кода, а не разделяющимися кусками. Надо другое слово придумать. Инкапсулирующий? Изолирующий? Огораживающий? Разделяющий? Наверно, огораживающий.
torbasow 10.11.2015 17:21 # +1
Steve_Brown 11.11.2015 12:06 # 0
3_14dar 11.11.2015 12:29 # +2
inkanus-gray 12.11.2015 00:36 # +2
Stallman 12.11.2015 00:47 # +2
inkanus-gray 12.11.2015 00:56 # 0
3_14dar 12.11.2015 01:03 # +4
«Хорошилище грядет из ристалища на позорище по гульбищу в мокроступах и с растопыркой» («Франт идет из цирка в театр по бульвару в галошах и с зонтиком»)
guest 14.11.2015 16:47 # 0
HiNeX 12.11.2015 01:46 # +2
inkanus-gray 12.11.2015 18:45 # 0
antiboom 13.11.2015 03:50 # 0
Stallman 13.11.2015 10:49 # 0
antiboom 18.11.2015 01:15 # 0
знаешь спеки ecmascript, какие-то библиотеки js и тд уже не проблема.
не знаешь - появляются такие посты негодования, если честно я даже сейчас не понимаю, что у автора поста не так с кодом, он даже объяснить нормально не смог.
3_14dar 18.11.2015 08:04 # 0
guest 14.11.2015 16:48 # +1
Bocs 22.11.2015 22:40 # −1