SlideShare a Scribd company logo
1 of 17
Download to read offline
coslint
статическая	
  проверка	
  кода	
  на	
  COS	
  
Caché Object Script
●  Слабая динамическая типизация
USER>write	
  “22	
  яблока”	
  +	
  “3	
  груши”	
  
	
  25	
  
●  Минусы:
o  runtime-ошибки, которые очевидны при просмотре
программы
●  Плюсы:
o  гибкость
o  скорость компиляции
=====Test.test:Hello=====	
  
3:	
  	
  	
  	
  }elseif	
  name	
  =	
  "Вася"	
  ||	
  name	
  =	
  "Петя"	
  {	
  
	
  	
  	
  	
  Might	
  be	
  missed	
  parentheses	
  in	
  name	
  =	
  "Вася"	
  ||	
  name	
  =	
  "Петя".	
  
6:	
  	
  	
  	
  q	
  
	
  	
  	
  	
  Quit	
  without	
  arguments.	
  Method	
  should	
  return	
  %Library.String.	
  
=====Test.test:test=====	
  
3:	
  	
  	
  	
  s	
  p.Surname	
  =	
  "Doe"	
  
	
  	
  	
  	
  Property	
  Test.test:Surname	
  is	
  not	
  found.	
  
4:	
  	
  	
  	
  w	
  p.Hello()	
  
	
  	
  	
  	
  Omitted	
  1	
  argument	
  in	
  call	
  of	
  Test.test:Hello.	
  Expected:	
  
%Library.String.	
  
========================================	
  
	
  
	
  
Что можно проверить без типов
●  Возможно забытые скобки:
o  if	
  a	
  =	
  1	
  ||	
  a	
  =	
  2	
  
●  Выход без аргумента, хотя метод должен что-то
вернуть:
Method	
  Sqr(a	
  As	
  %Integer)	
  As	
  %Integer	
  {	
  
	
  	
  	
  	
  set	
  res	
  =	
  a	
  **	
  2	
  
	
  	
  	
  	
  quit	
  
	
  }	
  
Что можно проверить без типов
●  Отсутствие quit (или return) вообще, если метод
должен что-то вернуть
●  Обращение к несуществующему классу
●  Переменная не была определена перед
обращением
Что можно проверить с типами
●  Все-ли параметры передали в метод и не передали-
ли лишних
●  Передали параметр нужного типа
●  Обращение к свойству/методу, которого у данного
класса нет
●  Вызвали метод, который возвращает %Status, но не
проверили его значение
Что ещё можно проверять?
●  Неиспользуемые
o  параметры
o  переменные
o  переменные цикла
●  Переменная цикла for меняется в теле
цикла.
Как узнать тип переменной? (1/3)
●  переменная — аргумент метода
●  set a = <expression>
●  #dim a As Sample.Person
●  set a = ##class(...).%New()
●  set a = ##class(...).%OpenId(...)
●  переменная была передана в вызов метода по
ссылке
Как узнать тип переменной? (2/3)
●  set $Extract(a, …) = <expr>
●  set $Piece(a, …) = <expr>
●  set $ListBuild(a, ...) = <list-expr>
●  set $List(a, … ) = <expr>
●  $Data(… , a), $Order(... , a), $Query(..., a)
●  $ListNext(..., a)
Пример с $Data
If	
  $Data(^someglobal(1),	
  val)#10=1	
  {	
  
	
  	
  	
  write	
  val,!	
  
}	
  
Как узнать тип переменной? (3/3)
●  &sql (select … into :a ...)
●  &sql (fetch … into :a)
●  try { … } catch a { ... }
●  read a
●  merge a = <some-var>
%IsA
set	
  a	
  =	
  somecollection.GetAt(1)	
  
if	
  (	
  a.%IsA("Sample.Employee")	
  	
  
	
  	
  	
  	
  	
  &&	
  somecondition	
  	
  
	
  	
  	
  	
  	
  &&	
  (somecondition2	
  ||	
  somothercondition))	
  {	
  
	
  	
  	
  	
  	
  //здесь	
  a	
  имеет	
  тип	
  Sample.Employee	
  
	
  	
  	
  	
  }	
  
//здесь	
  тип	
  a	
  опять	
  как	
  у	
  всех	
  элементов	
  коллекции	
  
Опять же, не всё так просто
Method	
  some(a	
  As	
  Sample.Person)	
  {	
  
	
  	
  if	
  a.%IsA(“Sample.Employee”)	
  {	
  
	
  	
  	
  	
  set	
  a	
  =	
  ##class(Sample.Company).%New()	
  
	
  	
  }	
  
	
  	
  //	
  что	
  мы	
  теперь	
  можем	
  сказать	
  об	
  a?	
  
}	
  
Наконец есть
●  %objlasterror
●  SQLCODE
●  %request
●  %response
●  %session
●  %page
●  %application
●  …
Спасибо
Что ещё можно проверять?

More Related Content

What's hot

Lecture5
Lecture5Lecture5
Lecture5orgil
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Python Meetup
 
Web весна 2013 лекция 9
Web весна 2013 лекция 9Web весна 2013 лекция 9
Web весна 2013 лекция 9Technopark
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаAnton Arhipov
 
Нетривиальная обработка ошибок
Нетривиальная обработка ошибокНетривиальная обработка ошибок
Нетривиальная обработка ошибокoelifantiev
 
Артем Яворский "@babel/core": "7.x"
Артем Яворский "@babel/core": "7.x"Артем Яворский "@babel/core": "7.x"
Артем Яворский "@babel/core": "7.x"Fwdays
 
PHP7 - Предрелизный обзор
PHP7 - Предрелизный обзорPHP7 - Предрелизный обзор
PHP7 - Предрелизный обзорGrossum
 
По колено в Си++ г... коде
По колено в Си++ г... кодеПо колено в Си++ г... коде
По колено в Си++ г... кодеTatyanazaxarova
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Sergey Platonov
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)Ontico
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Аскетичная разработка браузера
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузераPlatonov Sergey
 
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Yandex
 
Go Template Toolkit, Сергей Свистунов, Lazada
Go Template Toolkit, Сергей Свистунов, LazadaGo Template Toolkit, Сергей Свистунов, Lazada
Go Template Toolkit, Сергей Свистунов, LazadaMail.ru Group
 

What's hot (20)

Lecture5
Lecture5Lecture5
Lecture5
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"
 
Web весна 2013 лекция 9
Web весна 2013 лекция 9Web весна 2013 лекция 9
Web весна 2013 лекция 9
 
JavaScript как объектно-ориентированный язык программирования
JavaScript как объектно-ориентированный язык программированияJavaScript как объектно-ориентированный язык программирования
JavaScript как объектно-ориентированный язык программирования
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчика
 
Нетривиальная обработка ошибок
Нетривиальная обработка ошибокНетривиальная обработка ошибок
Нетривиальная обработка ошибок
 
Артем Яворский "@babel/core": "7.x"
Артем Яворский "@babel/core": "7.x"Артем Яворский "@babel/core": "7.x"
Артем Яворский "@babel/core": "7.x"
 
PHP7 - Предрелизный обзор
PHP7 - Предрелизный обзорPHP7 - Предрелизный обзор
PHP7 - Предрелизный обзор
 
Collider
ColliderCollider
Collider
 
бегун
бегунбегун
бегун
 
По колено в Си++ г... коде
По колено в Си++ г... кодеПо колено в Си++ г... коде
По колено в Си++ г... коде
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++
 
Parallel STL
Parallel STLParallel STL
Parallel STL
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Decorators' recipes
Decorators' recipesDecorators' recipes
Decorators' recipes
 
Funny JS #1
Funny JS #1Funny JS #1
Funny JS #1
 
Аскетичная разработка браузера
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузера
 
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
 
Go Template Toolkit, Сергей Свистунов, Lazada
Go Template Toolkit, Сергей Свистунов, LazadaGo Template Toolkit, Сергей Свистунов, Lazada
Go Template Toolkit, Сергей Свистунов, Lazada
 

Viewers also liked

intersystems iknow approach for natural language processing on tourist requests
intersystems iknow approach for natural language processing on tourist requestsintersystems iknow approach for natural language processing on tourist requests
intersystems iknow approach for natural language processing on tourist requestsInterSystems
 
Intersystems Cache - Как не загреметь в долговую яму
Intersystems Cache - Как не загреметь в долговую ямуIntersystems Cache - Как не загреметь в долговую яму
Intersystems Cache - Как не загреметь в долговую ямуDenis Pavlov
 
InterSystems Healthshare +DeepSee. Hospitalization queue
InterSystems Healthshare +DeepSee. Hospitalization queueInterSystems Healthshare +DeepSee. Hospitalization queue
InterSystems Healthshare +DeepSee. Hospitalization queueInterSystems
 
Deep see mobile meetup красноярск
Deep see mobile meetup красноярскDeep see mobile meetup красноярск
Deep see mobile meetup красноярскInterSystems
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukInterSystems
 
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014InterSystems
 
DeepSee SYSMON - InterSystems Caché System Monitoring Analytics
DeepSee SYSMON - InterSystems Caché System Monitoring AnalyticsDeepSee SYSMON - InterSystems Caché System Monitoring Analytics
DeepSee SYSMON - InterSystems Caché System Monitoring AnalyticsInterSystems
 
InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015InterSystems
 
InterSystems news Meetup Sankt-Peterburg2015
InterSystems news Meetup Sankt-Peterburg2015InterSystems news Meetup Sankt-Peterburg2015
InterSystems news Meetup Sankt-Peterburg2015InterSystems
 
InterSystems Caché REST Forms
InterSystems Caché REST FormsInterSystems Caché REST Forms
InterSystems Caché REST FormsInterSystems
 

Viewers also liked (10)

intersystems iknow approach for natural language processing on tourist requests
intersystems iknow approach for natural language processing on tourist requestsintersystems iknow approach for natural language processing on tourist requests
intersystems iknow approach for natural language processing on tourist requests
 
Intersystems Cache - Как не загреметь в долговую яму
Intersystems Cache - Как не загреметь в долговую ямуIntersystems Cache - Как не загреметь в долговую яму
Intersystems Cache - Как не загреметь в долговую яму
 
InterSystems Healthshare +DeepSee. Hospitalization queue
InterSystems Healthshare +DeepSee. Hospitalization queueInterSystems Healthshare +DeepSee. Hospitalization queue
InterSystems Healthshare +DeepSee. Hospitalization queue
 
Deep see mobile meetup красноярск
Deep see mobile meetup красноярскDeep see mobile meetup красноярск
Deep see mobile meetup красноярск
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard Lebedyuk
 
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
 
DeepSee SYSMON - InterSystems Caché System Monitoring Analytics
DeepSee SYSMON - InterSystems Caché System Monitoring AnalyticsDeepSee SYSMON - InterSystems Caché System Monitoring Analytics
DeepSee SYSMON - InterSystems Caché System Monitoring Analytics
 
InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015
 
InterSystems news Meetup Sankt-Peterburg2015
InterSystems news Meetup Sankt-Peterburg2015InterSystems news Meetup Sankt-Peterburg2015
InterSystems news Meetup Sankt-Peterburg2015
 
InterSystems Caché REST Forms
InterSystems Caché REST FormsInterSystems Caché REST Forms
InterSystems Caché REST Forms
 

Similar to Статический анализатор кода для InterSystems Caché Object Script

Очень вкусный фрукт Guava
Очень вкусный фрукт GuavaОчень вкусный фрукт Guava
Очень вкусный фрукт GuavaEgor Chernyshev
 
Groovy jug-moscow-part 1
Groovy jug-moscow-part 1Groovy jug-moscow-part 1
Groovy jug-moscow-part 1Evgeny Borisov
 
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...Mail.ru Group
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?Vasil Remeniuk
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioAndrey Karpov
 
Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.Roman Brovko
 
Лекция 6. Классы 1.
Лекция 6. Классы 1.Лекция 6. Классы 1.
Лекция 6. Классы 1.Roman Brovko
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиZestranec
 
CiklumCPPSat: Ivan Romanenko "Experience of work with Boost Spirit"
CiklumCPPSat: Ivan Romanenko "Experience of work with Boost Spirit"CiklumCPPSat: Ivan Romanenko "Experience of work with Boost Spirit"
CiklumCPPSat: Ivan Romanenko "Experience of work with Boost Spirit"Ciklum Ukraine
 
Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)Ontico
 
Join the python_side
Join the python_sideJoin the python_side
Join the python_sidePaul Dmitryev
 
Intelligent или сделай мне красиво
Intelligent или сделай мне красивоIntelligent или сделай мне красиво
Intelligent или сделай мне красивоArtem Malyshev
 
Контрактное программирование
Контрактное программированиеКонтрактное программирование
Контрактное программированиеIlya Zelenchuk
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
 
Statis code analysis
Statis code analysisStatis code analysis
Statis code analysischashnikov
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3Eugeniy Tyumentcev
 

Similar to Статический анализатор кода для InterSystems Caché Object Script (20)

Очень вкусный фрукт Guava
Очень вкусный фрукт GuavaОчень вкусный фрукт Guava
Очень вкусный фрукт Guava
 
Groovy jug-moscow-part 1
Groovy jug-moscow-part 1Groovy jug-moscow-part 1
Groovy jug-moscow-part 1
 
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
Bytecode
BytecodeBytecode
Bytecode
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
Рекурсия. Поиск
Рекурсия. ПоискРекурсия. Поиск
Рекурсия. Поиск
 
Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.
 
Лекция 6. Классы 1.
Лекция 6. Классы 1.Лекция 6. Классы 1.
Лекция 6. Классы 1.
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
course js day 2
course js day 2course js day 2
course js day 2
 
CiklumCPPSat: Ivan Romanenko "Experience of work with Boost Spirit"
CiklumCPPSat: Ivan Romanenko "Experience of work with Boost Spirit"CiklumCPPSat: Ivan Romanenko "Experience of work with Boost Spirit"
CiklumCPPSat: Ivan Romanenko "Experience of work with Boost Spirit"
 
Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)
 
Join the python_side
Join the python_sideJoin the python_side
Join the python_side
 
Intelligent или сделай мне красиво
Intelligent или сделай мне красивоIntelligent или сделай мне красиво
Intelligent или сделай мне красиво
 
Контрактное программирование
Контрактное программированиеКонтрактное программирование
Контрактное программирование
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 
Statis code analysis
Statis code analysisStatis code analysis
Statis code analysis
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 

More from InterSystems

InterSystems Developers Community Update Global Summit 2019
InterSystems Developers Community Update Global Summit 2019InterSystems Developers Community Update Global Summit 2019
InterSystems Developers Community Update Global Summit 2019InterSystems
 
InterSystems IRIS Data Platfrom: Sharding and Scalability
InterSystems IRIS Data Platfrom: Sharding and ScalabilityInterSystems IRIS Data Platfrom: Sharding and Scalability
InterSystems IRIS Data Platfrom: Sharding and ScalabilityInterSystems
 
DeepSee Web: Angular Render for InterSystems DeepSee Dashboards
DeepSee Web: Angular Render for InterSystems DeepSee DashboardsDeepSee Web: Angular Render for InterSystems DeepSee Dashboards
DeepSee Web: Angular Render for InterSystems DeepSee DashboardsInterSystems
 
InterSystems Caché Localization Manager
InterSystems Caché Localization Manager InterSystems Caché Localization Manager
InterSystems Caché Localization Manager InterSystems
 
Source Control Addon for InterSystems Caché with UDL support
Source Control Addon for InterSystems Caché with UDL supportSource Control Addon for InterSystems Caché with UDL support
Source Control Addon for InterSystems Caché with UDL supportInterSystems
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergrationInterSystems
 
InterSystems High Availability and Mirroring solutions
InterSystems High Availability and Mirroring solutionsInterSystems High Availability and Mirroring solutions
InterSystems High Availability and Mirroring solutionsInterSystems
 
Enterprise Serial Bus on InterSystems Ensemble
Enterprise Serial Bus on InterSystems EnsembleEnterprise Serial Bus on InterSystems Ensemble
Enterprise Serial Bus on InterSystems EnsembleInterSystems
 
Интеграционная шина на базе InterSystems Ensemble
Интеграционная шина на базе InterSystems EnsembleИнтеграционная шина на базе InterSystems Ensemble
Интеграционная шина на базе InterSystems EnsembleInterSystems
 
Перевод базы Caché из 8 бит в Unicode
Перевод базы Caché из 8 бит в UnicodeПеревод базы Caché из 8 бит в Unicode
Перевод базы Caché из 8 бит в UnicodeInterSystems
 
Примеры использования iknow в медицине - InterSystems Meetup Sankt-Peterburg ...
Примеры использования iknow в медицине - InterSystems Meetup Sankt-Peterburg ...Примеры использования iknow в медицине - InterSystems Meetup Sankt-Peterburg ...
Примеры использования iknow в медицине - InterSystems Meetup Sankt-Peterburg ...InterSystems
 
Caché Native Access. InterSystems Meetup 2014
Caché Native Access. InterSystems  Meetup 2014Caché Native Access. InterSystems  Meetup 2014
Caché Native Access. InterSystems Meetup 2014InterSystems
 
Управление изменениями и коллективная разработка в Caché. InterSystems Meetup...
Управление изменениями и коллективная разработка в Caché. InterSystems Meetup...Управление изменениями и коллективная разработка в Caché. InterSystems Meetup...
Управление изменениями и коллективная разработка в Caché. InterSystems Meetup...InterSystems
 

More from InterSystems (13)

InterSystems Developers Community Update Global Summit 2019
InterSystems Developers Community Update Global Summit 2019InterSystems Developers Community Update Global Summit 2019
InterSystems Developers Community Update Global Summit 2019
 
InterSystems IRIS Data Platfrom: Sharding and Scalability
InterSystems IRIS Data Platfrom: Sharding and ScalabilityInterSystems IRIS Data Platfrom: Sharding and Scalability
InterSystems IRIS Data Platfrom: Sharding and Scalability
 
DeepSee Web: Angular Render for InterSystems DeepSee Dashboards
DeepSee Web: Angular Render for InterSystems DeepSee DashboardsDeepSee Web: Angular Render for InterSystems DeepSee Dashboards
DeepSee Web: Angular Render for InterSystems DeepSee Dashboards
 
InterSystems Caché Localization Manager
InterSystems Caché Localization Manager InterSystems Caché Localization Manager
InterSystems Caché Localization Manager
 
Source Control Addon for InterSystems Caché with UDL support
Source Control Addon for InterSystems Caché with UDL supportSource Control Addon for InterSystems Caché with UDL support
Source Control Addon for InterSystems Caché with UDL support
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergration
 
InterSystems High Availability and Mirroring solutions
InterSystems High Availability and Mirroring solutionsInterSystems High Availability and Mirroring solutions
InterSystems High Availability and Mirroring solutions
 
Enterprise Serial Bus on InterSystems Ensemble
Enterprise Serial Bus on InterSystems EnsembleEnterprise Serial Bus on InterSystems Ensemble
Enterprise Serial Bus on InterSystems Ensemble
 
Интеграционная шина на базе InterSystems Ensemble
Интеграционная шина на базе InterSystems EnsembleИнтеграционная шина на базе InterSystems Ensemble
Интеграционная шина на базе InterSystems Ensemble
 
Перевод базы Caché из 8 бит в Unicode
Перевод базы Caché из 8 бит в UnicodeПеревод базы Caché из 8 бит в Unicode
Перевод базы Caché из 8 бит в Unicode
 
Примеры использования iknow в медицине - InterSystems Meetup Sankt-Peterburg ...
Примеры использования iknow в медицине - InterSystems Meetup Sankt-Peterburg ...Примеры использования iknow в медицине - InterSystems Meetup Sankt-Peterburg ...
Примеры использования iknow в медицине - InterSystems Meetup Sankt-Peterburg ...
 
Caché Native Access. InterSystems Meetup 2014
Caché Native Access. InterSystems  Meetup 2014Caché Native Access. InterSystems  Meetup 2014
Caché Native Access. InterSystems Meetup 2014
 
Управление изменениями и коллективная разработка в Caché. InterSystems Meetup...
Управление изменениями и коллективная разработка в Caché. InterSystems Meetup...Управление изменениями и коллективная разработка в Caché. InterSystems Meetup...
Управление изменениями и коллективная разработка в Caché. InterSystems Meetup...
 

Статический анализатор кода для InterSystems Caché Object Script

  • 2. Caché Object Script ●  Слабая динамическая типизация USER>write  “22  яблока”  +  “3  груши”    25   ●  Минусы: o  runtime-ошибки, которые очевидны при просмотре программы ●  Плюсы: o  гибкость o  скорость компиляции
  • 3.
  • 4.
  • 5. =====Test.test:Hello=====   3:        }elseif  name  =  "Вася"  ||  name  =  "Петя"  {          Might  be  missed  parentheses  in  name  =  "Вася"  ||  name  =  "Петя".   6:        q          Quit  without  arguments.  Method  should  return  %Library.String.   =====Test.test:test=====   3:        s  p.Surname  =  "Doe"          Property  Test.test:Surname  is  not  found.   4:        w  p.Hello()          Omitted  1  argument  in  call  of  Test.test:Hello.  Expected:   %Library.String.   ========================================      
  • 6. Что можно проверить без типов ●  Возможно забытые скобки: o  if  a  =  1  ||  a  =  2   ●  Выход без аргумента, хотя метод должен что-то вернуть: Method  Sqr(a  As  %Integer)  As  %Integer  {          set  res  =  a  **  2          quit    }  
  • 7. Что можно проверить без типов ●  Отсутствие quit (или return) вообще, если метод должен что-то вернуть ●  Обращение к несуществующему классу ●  Переменная не была определена перед обращением
  • 8. Что можно проверить с типами ●  Все-ли параметры передали в метод и не передали- ли лишних ●  Передали параметр нужного типа ●  Обращение к свойству/методу, которого у данного класса нет ●  Вызвали метод, который возвращает %Status, но не проверили его значение
  • 9. Что ещё можно проверять? ●  Неиспользуемые o  параметры o  переменные o  переменные цикла ●  Переменная цикла for меняется в теле цикла.
  • 10. Как узнать тип переменной? (1/3) ●  переменная — аргумент метода ●  set a = <expression> ●  #dim a As Sample.Person ●  set a = ##class(...).%New() ●  set a = ##class(...).%OpenId(...) ●  переменная была передана в вызов метода по ссылке
  • 11. Как узнать тип переменной? (2/3) ●  set $Extract(a, …) = <expr> ●  set $Piece(a, …) = <expr> ●  set $ListBuild(a, ...) = <list-expr> ●  set $List(a, … ) = <expr> ●  $Data(… , a), $Order(... , a), $Query(..., a) ●  $ListNext(..., a)
  • 12. Пример с $Data If  $Data(^someglobal(1),  val)#10=1  {        write  val,!   }  
  • 13. Как узнать тип переменной? (3/3) ●  &sql (select … into :a ...) ●  &sql (fetch … into :a) ●  try { … } catch a { ... } ●  read a ●  merge a = <some-var>
  • 14. %IsA set  a  =  somecollection.GetAt(1)   if  (  a.%IsA("Sample.Employee")              &&  somecondition              &&  (somecondition2  ||  somothercondition))  {            //здесь  a  имеет  тип  Sample.Employee          }   //здесь  тип  a  опять  как  у  всех  элементов  коллекции  
  • 15. Опять же, не всё так просто Method  some(a  As  Sample.Person)  {      if  a.%IsA(“Sample.Employee”)  {          set  a  =  ##class(Sample.Company).%New()      }      //  что  мы  теперь  можем  сказать  об  a?   }  
  • 16. Наконец есть ●  %objlasterror ●  SQLCODE ●  %request ●  %response ●  %session ●  %page ●  %application ●  …